Tool definitions, annotations, and client compatibility.
Skills over MCP resources are readable
Server does not advertise the Skills over MCP extension
All tools have OpenAI behavior hints
21 behavior annotation issue(s) found
How to fix: On each tool, declare annotations.readOnlyHint, annotations.destructiveHint, and annotations.openWorldHint as booleans. The policy review separately assesses whether their values match the tool's actual behavior.
App resources, metadata, and rendering requirements.
Tool invocation metadata present
4 tool(s) missing openai/toolInvocation metadata
How to fix: For tools that render a UI resource, add openai/toolInvocation with string fields invoking and invoked (present-tense labels shown while the tool runs and after it finishes, e.g. "Searching…" / "Searched").
How to fix: Use a ui:// URI and text/html;profile=mcp-app. For mcp-use v1, use widgetMetadata.metadata.widgetDescription; for v2, use the bound tool's view.description. The current description check reads _meta.ui.widgetDescription or _meta["openai/widgetDescription"] on resource contents or linked tools, not resource.description. Consequently, v2 view.description alone may leave this warning: report the checker compatibility gap instead of adding unsupported v1 fields or claiming the warning is fixed.
How to fix: For ChatGPT submission, set one exact HTTPS origin such as "https://app.example.com" on every view via _meta.ui.domain (or openai/widgetDomain). Paths are not valid and all views in one app must share the origin.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Devuelve la informacion del usuario autenticado, su organizacion, si su rol puede usar propose_changes y como se aprueban los cambios (writeToolsUnavailableReasons), y si los permisos de su rol le permiten proponer o consultar planes de cambios a la matriz (propose_matrix_plan, get_matrix_plan), que no dependen de las herramientas de escritura. La respuesta de esas herramientas es la que manda: el equipo de Skyward y la organización de plantillas siguen reglas propias. Usalo para verificar el contexto de autenticacion antes de invocar otras herramientas.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "whoami",
"title": "Quien soy",
"description": "Devuelve la informacion del usuario autenticado, su organizacion, si su rol puede usar propose_changes y como se aprueban los cambios (writeToolsUnavailableReasons), y si los permisos de su rol le permiten proponer o consultar planes de cambios a la matriz (propose_matrix_plan, get_matrix_plan), que no dependen de las herramientas de escritura. La respuesta de esas herramientas es la que manda: el equipo de Skyward y la organización de plantillas siguen reglas propias. Usalo para verificar el contexto de autenticacion antes de invocar otras herramientas.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Matrix Builder: elegir la organización de este chat
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Matrix Builder. Muestra un selector donde la persona elige con qué organización de Skyward (el cliente cuya matriz de riesgos se construye) trabaja este chat. Elige la persona, nunca tú. Al elegir, el selector te entrega un candado (chatLock) que debes pasar en cada herramienta de Skyward durante este chat. Llámala al empezar a trabajar con Skyward o cuando una herramienta diga que falta elegir la organización. Si la persona quiere cambiar de organización, sugiérele abrir un chat nuevo.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "matrix_builder_choose_organization",
"title": "Matrix Builder: elegir la organización de este chat",
"description": "Matrix Builder. Muestra un selector donde la persona elige con qué organización de Skyward (el cliente cuya matriz de riesgos se construye) trabaja este chat. Elige la persona, nunca tú. Al elegir, el selector te entrega un candado (chatLock) que debes pasar en cada herramienta de Skyward durante este chat. Llámala al empezar a trabajar con Skyward o cuando una herramienta diga que falta elegir la organización. Si la persona quiere cambiar de organización, sugiérele abrir un chat nuevo.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "matrix_builder_guard_call",
"title": "Matrix Builder: revisar una llamada a Skyward",
"description": "Matrix Builder. Solo la usa el plugin Skyward Matrix Builder antes de cada llamada, para fijar la organización de la carpeta. No la llames tú.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"folder",
"toolName",
"toolInput"
],
"properties": {
"folder": {
"type": "string"
},
"toolName": {
"type": "string"
},
"toolInput": {
"type": "string"
}
}
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}
}
Matrix Builder: asociar la carpeta del cliente a su organización
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Matrix Builder. Asocia la carpeta de esta sesión de Cowork o Claude Code, donde se construye la matriz de riesgos de un cliente, con la organización de Skyward de ese cliente que la persona eligió. Úsala cuando una herramienta de Skyward diga que la carpeta no tiene organización, o cuando la persona pida cambiarla. Solo funciona con el plugin Skyward Matrix Builder, que le pide a la persona que lo confirme. Pásale solo el organizationId; el plugin completa el resto.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
organizationId
Not provided
Missing description. Explain what this value means and how to supply it.
folder
Not provided
Missing description. Explain what this value means and how to supply it.
confirmation
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "matrix_builder_bind_folder",
"title": "Matrix Builder: asociar la carpeta del cliente a su organización",
"description": "Matrix Builder. Asocia la carpeta de esta sesión de Cowork o Claude Code, donde se construye la matriz de riesgos de un cliente, con la organización de Skyward de ese cliente que la persona eligió. Úsala cuando una herramienta de Skyward diga que la carpeta no tiene organización, o cuando la persona pida cambiarla. Solo funciona con el plugin Skyward Matrix Builder, que le pide a la persona que lo confirme. Pásale solo el organizationId; el plugin completa el resto.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"organizationId"
],
"properties": {
"folder": {
"type": "string"
},
"confirmation": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"organizationId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Devuelve el texto extraído del documento vigente de una política, evidencia o documento de Skyward (el id viene de policy_search, evidence_search o la query documents), para que lo analices tú. Cita solo texto que aparezca en `content`; si `truncated` es true, la parte final no está.
The description explains the capability, when to use it, and what to expect.
Inputs25/100
1 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
entity
Not provided
Missing description. Explain what this value means and how to supply it.
id
Not provided
Missing description. Explain what this value means and how to supply it.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "read_document",
"title": "Leer documento",
"description": "Devuelve el texto extraído del documento vigente de una política, evidencia o documento de Skyward (el id viene de policy_search, evidence_search o la query documents), para que lo analices tú. Cita solo texto que aparezca en `content`; si `truncated` es true, la parte final no está.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"entity",
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"entity": {
"enum": [
"policy",
"evidence",
"document",
"file"
],
"type": "string"
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
[query] Devuelve las VARIABLES del motor de riesgo de cada control (fortaleza, implementación, automatización, evidencia, segregación), su peso y quién y cuándo las evaluó. NO es la efectividad que ve el usuario: para "qué controles no son efectivos" usa control_search con `effectiveness`.
The description explains the capability, when to use it, and what to expect.
Inputs58/100
Resolve the mismatch between this description and its schema constraints.
controlIds
Ids de los controles a consultar (obtenlos con control_search). Sin este filtro devuelve todos los controles de la organización.
Resolve the mismatch between this description and its schema constraints.
includeHistory
false (por defecto) = solo la evaluación vigente de cada control; true = también las evaluaciones anteriores.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_control_risk_variables",
"title": "Variables del motor de riesgo de controles",
"description": "[query] Devuelve las VARIABLES del motor de riesgo de cada control (fortaleza, implementación, automatización, evidencia, segregación), su peso y quién y cuándo las evaluó. NO es la efectividad que ve el usuario: para \"qué controles no son efectivos\" usa control_search con `effectiveness`.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"controlIds": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"minItems": 1,
"description": "Ids de los controles a consultar (obtenlos con control_search). Sin este filtro devuelve todos los controles de la organización."
},
"includeHistory": {
"type": "boolean",
"default": false,
"description": "false (por defecto) = solo la evaluación vigente de cada control; true = también las evaluaciones anteriores."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
[query] Devuelve la verificacion ACTIVA de UN control por su controlId (UUID; obtenlo con control_search): estado, version actual y el aprobador. Devuelve vacio si el control no tiene verificacion. Usalo cuando pregunten si un control esta verificado o aprobado, o quien lo aprueba.
The description explains the capability, when to use it, and what to expect.
Inputs63/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
controlId
UUID del control
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_control_verification",
"title": "Verificacion de control",
"description": "[query] Devuelve la verificacion ACTIVA de UN control por su controlId (UUID; obtenlo con control_search): estado, version actual y el aprobador. Devuelve vacio si el control no tiene verificacion. Usalo cuando pregunten si un control esta verificado o aprobado, o quien lo aprueba.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"controlId"
],
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"controlId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "UUID del control"
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
[query] Devuelve las aprobaciones donde el usuario de la sesion es aprobador (sin parametros), tanto pendientes como ya decididas, cada una con su entidad vinculada (validacion de control, version de politica, de evidencia o de verificacion con su control). Filtra por estado al responder.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_my_approvals",
"title": "Mis aprobaciones",
"description": "[query] Devuelve las aprobaciones donde el usuario de la sesion es aprobador (sin parametros), tanto pendientes como ya decididas, cada una con su entidad vinculada (validacion de control, version de politica, de evidencia o de verificacion con su control). Filtra por estado al responder.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
[query] Devuelve los controles cuyo responsable es el usuario de la sesion (sin parametros), cada uno con `taskStatus` ya calculado: OVERDUE = monitoreo vencido o control NO efectivo; EXPIRING_SOON = el monitoreo vence pronto; VALID, NO_APPROVAL y NO_RECURRENCE = nada pendiente. Reporta segun `taskStatus` sin recalcularlo; `monitoringDueAt` solo sirve para redactar "vencio/vence". Lo que vence es el monitoreo, no el control. Usalo para "mis controles" o "que monitoreos tengo vencidos o por vencer"; no es una fuente de "Mis tareas".
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_my_controls",
"title": "Mis controles",
"description": "[query] Devuelve los controles cuyo responsable es el usuario de la sesion (sin parametros), cada uno con `taskStatus` ya calculado: OVERDUE = monitoreo vencido o control NO efectivo; EXPIRING_SOON = el monitoreo vence pronto; VALID, NO_APPROVAL y NO_RECURRENCE = nada pendiente. Reporta segun `taskStatus` sin recalcularlo; `monitoringDueAt` solo sirve para redactar \"vencio/vence\". Lo que vence es el monitoreo, no el control. Usalo para \"mis controles\" o \"que monitoreos tengo vencidos o por vencer\"; no es una fuente de \"Mis tareas\".",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
[query] Devuelve las politicas cuyo responsable es el usuario de la sesion (sin parametros), con su ultima version. No las clasifica: una politica esta POR REVISAR si esta publicada (publication_status PUBLISHED) y su review_date ya paso o cae dentro de ~30 dias; publicarla mueve review_date hacia adelante. Usalo para "que politicas tengo que revisar" o "mis politicas por vencer"; no es una fuente de "Mis tareas".
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_my_review_policies",
"title": "Mis politicas por revisar",
"description": "[query] Devuelve las politicas cuyo responsable es el usuario de la sesion (sin parametros), con su ultima version. No las clasifica: una politica esta POR REVISAR si esta publicada (publication_status PUBLISHED) y su review_date ya paso o cae dentro de ~30 dias; publicarla mueve review_date hacia adelante. Usalo para \"que politicas tengo que revisar\" o \"mis politicas por vencer\"; no es una fuente de \"Mis tareas\".",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
[query] Devuelve las tareas de planes de accion asignadas al usuario actual que siguen abiertas (por hacer, en progreso o bloqueadas).
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_my_task_items",
"title": "Mis tareas pendientes",
"description": "[query] Devuelve las tareas de planes de accion asignadas al usuario actual que siguen abiertas (por hacer, en progreso o bloqueadas).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
[query] Busca, filtra, cuenta y agrupa CONTROLES.
Ejemplos:
- "Controles en diseño" → control_search({filter: {conditions: [{kind: 'field', field: 'lifecycle', test: {op: 'is', values: ['IN_DESIGN']}}]}})
- "Controles sin riesgos asociados" → control_search({filter: {conditions: [{kind: 'relation', relation: 'risks', quantifier: 'none'}]}})
- "Controles sin evidencia que los respalde" → control_search({filter: {conditions: [{kind: 'relation', relation: 'evidences', quantifier: 'none'}]}})
- "¿Qué controles NO son efectivos?" → control_search({filter: {conditions: [{kind: 'field', field: 'effectiveness', test: {op: 'is', values: ['NO_EFECTIVO']}}]}})
- "¿Cuántos controles efectivos hay?" → control_search({groupBy: 'effectiveness', pageSize: 1})
- "Controles con monitoreo vencido" → control_search({filter: {conditions: [{kind: 'field', field: 'monitoringStatus', test: {op: 'is', values: ['OVERDUE']}}]}})
- "Mis controles" → control_search({filter: {conditions: [{kind: 'field', field: 'owner', test: {op: 'is', values: ['me']}}]}})
- "Controles del marco ISO 27001" → control_search({filter: {conditions: [{kind: 'relation', relation: 'frameworks', quantifier: 'anyOf', ids: ['ISO 27001']}]}})
- "Controles que respaldan la evidencia Acta de comité" → control_search({filter: {conditions: [{kind: 'relation', relation: 'evidences', quantifier: 'anyOf', ids: ['Acta de comité']}]}})
- "El control de coheco" → control_search({filter: {search: 'coheco'}})
Cada ítem trae además { effectiveness, effectivenessReason, monitoringStatus }: effectivenessReason es el motivo cuando no es efectivo. El marco de un control se DERIVA de sus requisitos publicados y de los riesgos que mitiga; la relación frameworks ya aplica esa regla.
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de controles:
- name: text, "Nombre"; operadores contains, empty, notEmpty
- code: text, "Código"; operadores contains, empty, notEmpty
- lifecycle: enum, "Estado"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (En operación), RETIRED (Retirado)
- monitoringStatus: enum, "Estado de monitoreo"; operadores is, isNot, empty, notEmpty; opciones: OVERDUE (Monitoreo vencido), EXPIRING_SOON (Monitoreo por vencer), NO_APPROVAL (Sin aprobación), VALID (Vigente), NO_RECURRENCE (Sin recurrencia)
- effectiveness: enum, "Efectividad"; operadores is, isNot, empty, notEmpty; opciones: SIN_EVALUAR (Sin evaluar), EFECTIVO (Efectivo), NO_EFECTIVO (No efectivo)
- owner: user, "Responsable"; operadores is, isNot, empty, notEmpty
- hasSchedule: boolean, "Tiene recurrencia"; operadores isTrue, isFalse
- dueDate: date, "Fecha límite"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- createdAt: date, "Creado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- updatedAt: date, "Actualizado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- risks: riesgos
- evidences: evidencias
- policies: políticas
- requirements: requerimientos
- frameworks: marcos
- processes: procesos
- actionPlans: planes de acción
- tasks: tareas
- audits: auditorías
- tags: etiquetas
Campos personalizados: condición con kind customField, fieldId (el nombre del campo, tal como lo dice el usuario) y test. Sus nombres y opciones varían por organización; se resuelven por nombre y, si no calzan, la respuesta trae los que existen.
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs28/100
8 of 27 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › fieldId
Con kind customField: el nombre del campo personalizado tal como lo dice el usuario.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Clear enough to supply this argument.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Clear enough to supply this argument.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy › anyOf › 1 › customField
Not provided
Missing description. Explain what this value means and how to supply it.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "control_search",
"title": "control_search",
"description": "[query] Busca, filtra, cuenta y agrupa CONTROLES.\nEjemplos:\n- \"Controles en diseño\" → control_search({filter: {conditions: [{kind: 'field', field: 'lifecycle', test: {op: 'is', values: ['IN_DESIGN']}}]}})\n- \"Controles sin riesgos asociados\" → control_search({filter: {conditions: [{kind: 'relation', relation: 'risks', quantifier: 'none'}]}})\n- \"Controles sin evidencia que los respalde\" → control_search({filter: {conditions: [{kind: 'relation', relation: 'evidences', quantifier: 'none'}]}})\n- \"¿Qué controles NO son efectivos?\" → control_search({filter: {conditions: [{kind: 'field', field: 'effectiveness', test: {op: 'is', values: ['NO_EFECTIVO']}}]}})\n- \"¿Cuántos controles efectivos hay?\" → control_search({groupBy: 'effectiveness', pageSize: 1})\n- \"Controles con monitoreo vencido\" → control_search({filter: {conditions: [{kind: 'field', field: 'monitoringStatus', test: {op: 'is', values: ['OVERDUE']}}]}})\n- \"Mis controles\" → control_search({filter: {conditions: [{kind: 'field', field: 'owner', test: {op: 'is', values: ['me']}}]}})\n- \"Controles del marco ISO 27001\" → control_search({filter: {conditions: [{kind: 'relation', relation: 'frameworks', quantifier: 'anyOf', ids: ['ISO 27001']}]}})\n- \"Controles que respaldan la evidencia Acta de comité\" → control_search({filter: {conditions: [{kind: 'relation', relation: 'evidences', quantifier: 'anyOf', ids: ['Acta de comité']}]}})\n- \"El control de coheco\" → control_search({filter: {search: 'coheco'}})\nCada ítem trae además { effectiveness, effectivenessReason, monitoringStatus }: effectivenessReason es el motivo cuando no es efectivo. El marco de un control se DERIVA de sus requisitos publicados y de los riesgos que mitiga; la relación frameworks ya aplica esa regla.\n\nEntrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).\nCondición de campo: kind field, field (la clave) y test (op y su valor). Campos de controles:\n- name: text, \"Nombre\"; operadores contains, empty, notEmpty\n- code: text, \"Código\"; operadores contains, empty, notEmpty\n- lifecycle: enum, \"Estado\"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (En operación), RETIRED (Retirado)\n- monitoringStatus: enum, \"Estado de monitoreo\"; operadores is, isNot, empty, notEmpty; opciones: OVERDUE (Monitoreo vencido), EXPIRING_SOON (Monitoreo por vencer), NO_APPROVAL (Sin aprobación), VALID (Vigente), NO_RECURRENCE (Sin recurrencia)\n- effectiveness: enum, \"Efectividad\"; operadores is, isNot, empty, notEmpty; opciones: SIN_EVALUAR (Sin evaluar), EFECTIVO (Efectivo), NO_EFECTIVO (No efectivo)\n- owner: user, \"Responsable\"; operadores is, isNot, empty, notEmpty\n- hasSchedule: boolean, \"Tiene recurrencia\"; operadores isTrue, isFalse\n- dueDate: date, \"Fecha límite\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\n- createdAt: date, \"Creado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\n- updatedAt: date, \"Actualizado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\nCondición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:\n- risks: riesgos\n- evidences: evidencias\n- policies: políticas\n- requirements: requerimientos\n- frameworks: marcos\n- processes: procesos\n- actionPlans: planes de acción\n- tasks: tareas\n- audits: auditorías\n- tags: etiquetas\nCampos personalizados: condición con kind customField, fieldId (el nombre del campo, tal como lo dice el usuario) y test. Sus nombres y opciones varían por organización; se resuelven por nombre y, si no calzan, la respuesta trae los que existen.\n\nsort y search van dentro de filter, nunca al nivel superior.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Página solicitada, empieza en 1 (default 1)."
},
"filter": {
"type": "object",
"properties": {
"sort": {
"type": "object",
"required": [
"field",
"direction"
],
"properties": {
"field": {
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"additionalProperties": {}
},
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"match",
"conditions"
],
"properties": {
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Condiciones con la misma forma que las de filter.conditions."
}
},
"additionalProperties": {}
},
"description": "Grupos con su propio match: A AND (B OR C)."
},
"search": {
"type": "string",
"description": "Texto libre tolerante a typos sobre nombre, código y descripción."
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"enum": [
"field",
"relation",
"customField"
],
"type": "string"
},
"test": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"is",
"isNot",
"contains",
"eq",
"gte",
"lte",
"between",
"before",
"after",
"dateBetween",
"last",
"next",
"overdue",
"isTrue",
"isFalse",
"empty",
"notEmpty"
],
"type": "string"
},
"to": {
"type": [
"number",
"string"
]
},
"date": {
"type": "string"
},
"from": {
"type": [
"number",
"string"
]
},
"text": {
"type": "string"
},
"unit": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"amount": {
"type": "number"
},
"number": {
"type": "number"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Operador en op y su valor. enum y user: is o isNot con values, o empty y notEmpty. text: contains con text. number: eq, gte o lte con number, o between con from y to. date: before o after con date (YYYY-MM-DD), dateBetween con from y to, last o next con amount y unit, overdue, o empty y notEmpty. boolean: isTrue o isFalse. En values van valores o etiquetas; \"none\" = sin valor; en personas también nombre, correo o \"me\".",
"additionalProperties": {}
},
"field": {
"enum": [
"name",
"code",
"lifecycle",
"monitoringStatus",
"effectiveness",
"owner",
"hasSchedule",
"dueDate",
"createdAt",
"updatedAt"
],
"type": "string",
"description": "Con kind field."
},
"where": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Con kind relation: condiciones field o customField sobre los campos de la entidad relacionada."
},
"fieldId": {
"type": "string",
"description": "Con kind customField: el nombre del campo personalizado tal como lo dice el usuario."
},
"relation": {
"enum": [
"risks",
"evidences",
"policies",
"requirements",
"frameworks",
"processes",
"actionPlans",
"tasks",
"audits",
"tags"
],
"type": "string",
"description": "Con kind relation."
},
"quantifier": {
"enum": [
"anyOf",
"noneOf",
"any",
"none"
],
"type": "string",
"description": "Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids."
}
},
"description": "kind field: field y test. kind customField: fieldId y test. kind relation: relation, quantifier y, según el cuantificador, ids o where.",
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"groupBy": {
"anyOf": [
{
"type": "string",
"description": "Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1)."
},
{
"type": "object",
"required": [
"customField"
],
"properties": {
"customField": {
"type": "string"
}
},
"additionalProperties": {}
}
]
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 100,
"minimum": 1,
"description": "Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más."
}
},
"additionalProperties": {}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
[query] Busca, filtra, cuenta y agrupa RIESGOS. Es LA herramienta para listar o rankear riesgos (críticos, más severos, sin controles). level (inherente) y residualLevel (después de sus controles) los calcula el risk-engine: Crítico = INACEPTABLE, Alto = IMPORTANTE, Medio = MODERADO.
Ejemplos:
- "Riesgos críticos" → risk_search({filter: {conditions: [{kind: 'field', field: 'level', test: {op: 'is', values: ['INACEPTABLE']}}]}})
- "Riesgos que siguen críticos después de sus controles" → risk_search({filter: {conditions: [{kind: 'field', field: 'residualLevel', test: {op: 'is', values: ['INACEPTABLE']}}]}})
- "Top 10 de riesgos por severidad" → risk_search({filter: {sort: {field: 'score', direction: 'desc'}}, pageSize: 10})
- "Riesgos sin controles" → risk_search({filter: {conditions: [{kind: 'relation', relation: 'controls', quantifier: 'none'}]}})
- "Riesgos sin responsable" → risk_search({filter: {conditions: [{kind: 'field', field: 'owner', test: {op: 'is', values: ['none']}}]}})
- "Riesgos del marco ISO 27001" → risk_search({filter: {conditions: [{kind: 'relation', relation: 'frameworks', quantifier: 'anyOf', ids: ['ISO 27001']}]}})
- "¿Cuántos riesgos hay por nivel?" → risk_search({groupBy: 'level', pageSize: 1})
- "¿Cuántos riesgos hay por tipo de riesgo?" → risk_search({groupBy: {customField: 'Tipo de Riesgos'}, pageSize: 1})
- "Riesgos del campo personalizado Tipo de Riesgos en Delito Tributario" → risk_search({filter: {conditions: [{kind: 'customField', fieldId: 'Tipo de Riesgos', test: {op: 'is', values: ['Delito Tributario']}}]}})
- "El riesgo R-001" → risk_search({filter: {search: 'R-001'}})
Cada ítem trae además { isGrouped, groupId, groupCode, groupName } del riesgo corporativo. El marco de un riesgo viene solo de sus propios requisitos (sus controles no le suman marcos).
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de riesgos:
- name: text, "Nombre"; operadores contains, empty, notEmpty
- code: text, "Código"; operadores contains, empty, notEmpty
- status: enum, "Estado"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)
- owner: user, "Responsable"; operadores is, isNot, empty, notEmpty
- probability: enum, "Probabilidad"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)
- impact: enum, "Impacto"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)
- residualProbability: enum, "Probabilidad residual"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)
- residualImpact: enum, "Impacto residual"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)
- level: enum, "Nivel inherente"; operadores is, isNot, empty, notEmpty; opciones: MUY_BAJO (Muy bajo), BAJO (Bajo), MODERADO (Medio), IMPORTANTE (Alto), INACEPTABLE (Crítico)
- residualLevel: enum, "Nivel residual"; operadores is, isNot, empty, notEmpty; opciones: MUY_BAJO (Muy bajo), BAJO (Bajo), MODERADO (Medio), IMPORTANTE (Alto), INACEPTABLE (Crítico)
- score: number, "Puntaje"; operadores eq, gte, lte, between, empty, notEmpty
- residualScore: number, "Puntaje residual"; operadores eq, gte, lte, between, empty, notEmpty
- grouped: boolean, "Riesgo corporativo"; operadores isTrue, isFalse
- hasResidualAssessment: boolean, "Tiene evaluación residual"; operadores isTrue, isFalse
- createdAt: date, "Creado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- updatedAt: date, "Actualizado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- controls: controles
- processes: procesos
- actionPlans: planes de acción
- tasks: tareas
- requirements: requerimientos
- frameworks: marcos
- audits: auditorías
- tags: etiquetas
- evidences: evidencias
- policies: políticas
Campos personalizados: condición con kind customField, fieldId (el nombre del campo, tal como lo dice el usuario) y test. Sus nombres y opciones varían por organización; se resuelven por nombre y, si no calzan, la respuesta trae los que existen.
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs28/100
8 of 27 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › fieldId
Con kind customField: el nombre del campo personalizado tal como lo dice el usuario.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Clear enough to supply this argument.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Clear enough to supply this argument.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy › anyOf › 1 › customField
Not provided
Missing description. Explain what this value means and how to supply it.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "risk_search",
"title": "risk_search",
"description": "[query] Busca, filtra, cuenta y agrupa RIESGOS. Es LA herramienta para listar o rankear riesgos (críticos, más severos, sin controles). level (inherente) y residualLevel (después de sus controles) los calcula el risk-engine: Crítico = INACEPTABLE, Alto = IMPORTANTE, Medio = MODERADO.\nEjemplos:\n- \"Riesgos críticos\" → risk_search({filter: {conditions: [{kind: 'field', field: 'level', test: {op: 'is', values: ['INACEPTABLE']}}]}})\n- \"Riesgos que siguen críticos después de sus controles\" → risk_search({filter: {conditions: [{kind: 'field', field: 'residualLevel', test: {op: 'is', values: ['INACEPTABLE']}}]}})\n- \"Top 10 de riesgos por severidad\" → risk_search({filter: {sort: {field: 'score', direction: 'desc'}}, pageSize: 10})\n- \"Riesgos sin controles\" → risk_search({filter: {conditions: [{kind: 'relation', relation: 'controls', quantifier: 'none'}]}})\n- \"Riesgos sin responsable\" → risk_search({filter: {conditions: [{kind: 'field', field: 'owner', test: {op: 'is', values: ['none']}}]}})\n- \"Riesgos del marco ISO 27001\" → risk_search({filter: {conditions: [{kind: 'relation', relation: 'frameworks', quantifier: 'anyOf', ids: ['ISO 27001']}]}})\n- \"¿Cuántos riesgos hay por nivel?\" → risk_search({groupBy: 'level', pageSize: 1})\n- \"¿Cuántos riesgos hay por tipo de riesgo?\" → risk_search({groupBy: {customField: 'Tipo de Riesgos'}, pageSize: 1})\n- \"Riesgos del campo personalizado Tipo de Riesgos en Delito Tributario\" → risk_search({filter: {conditions: [{kind: 'customField', fieldId: 'Tipo de Riesgos', test: {op: 'is', values: ['Delito Tributario']}}]}})\n- \"El riesgo R-001\" → risk_search({filter: {search: 'R-001'}})\nCada ítem trae además { isGrouped, groupId, groupCode, groupName } del riesgo corporativo. El marco de un riesgo viene solo de sus propios requisitos (sus controles no le suman marcos).\n\nEntrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).\nCondición de campo: kind field, field (la clave) y test (op y su valor). Campos de riesgos:\n- name: text, \"Nombre\"; operadores contains, empty, notEmpty\n- code: text, \"Código\"; operadores contains, empty, notEmpty\n- status: enum, \"Estado\"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)\n- owner: user, \"Responsable\"; operadores is, isNot, empty, notEmpty\n- probability: enum, \"Probabilidad\"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)\n- impact: enum, \"Impacto\"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)\n- residualProbability: enum, \"Probabilidad residual\"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)\n- residualImpact: enum, \"Impacto residual\"; operadores is, isNot, empty, notEmpty; opciones: MINIMAL (Mínimo), LOW (Bajo), MEDIUM (Medio), HIGH (Alto), CRITICAL (Crítico)\n- level: enum, \"Nivel inherente\"; operadores is, isNot, empty, notEmpty; opciones: MUY_BAJO (Muy bajo), BAJO (Bajo), MODERADO (Medio), IMPORTANTE (Alto), INACEPTABLE (Crítico)\n- residualLevel: enum, \"Nivel residual\"; operadores is, isNot, empty, notEmpty; opciones: MUY_BAJO (Muy bajo), BAJO (Bajo), MODERADO (Medio), IMPORTANTE (Alto), INACEPTABLE (Crítico)\n- score: number, \"Puntaje\"; operadores eq, gte, lte, between, empty, notEmpty\n- residualScore: number, \"Puntaje residual\"; operadores eq, gte, lte, between, empty, notEmpty\n- grouped: boolean, \"Riesgo corporativo\"; operadores isTrue, isFalse\n- hasResidualAssessment: boolean, \"Tiene evaluación residual\"; operadores isTrue, isFalse\n- createdAt: date, \"Creado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\n- updatedAt: date, \"Actualizado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\nCondición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:\n- controls: controles\n- processes: procesos\n- actionPlans: planes de acción\n- tasks: tareas\n- requirements: requerimientos\n- frameworks: marcos\n- audits: auditorías\n- tags: etiquetas\n- evidences: evidencias\n- policies: políticas\nCampos personalizados: condición con kind customField, fieldId (el nombre del campo, tal como lo dice el usuario) y test. Sus nombres y opciones varían por organización; se resuelven por nombre y, si no calzan, la respuesta trae los que existen.\n\nsort y search van dentro de filter, nunca al nivel superior.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Página solicitada, empieza en 1 (default 1)."
},
"filter": {
"type": "object",
"properties": {
"sort": {
"type": "object",
"required": [
"field",
"direction"
],
"properties": {
"field": {
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"additionalProperties": {}
},
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"match",
"conditions"
],
"properties": {
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Condiciones con la misma forma que las de filter.conditions."
}
},
"additionalProperties": {}
},
"description": "Grupos con su propio match: A AND (B OR C)."
},
"search": {
"type": "string",
"description": "Texto libre tolerante a typos sobre nombre, código y descripción."
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"enum": [
"field",
"relation",
"customField"
],
"type": "string"
},
"test": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"is",
"isNot",
"contains",
"eq",
"gte",
"lte",
"between",
"before",
"after",
"dateBetween",
"last",
"next",
"overdue",
"isTrue",
"isFalse",
"empty",
"notEmpty"
],
"type": "string"
},
"to": {
"type": [
"number",
"string"
]
},
"date": {
"type": "string"
},
"from": {
"type": [
"number",
"string"
]
},
"text": {
"type": "string"
},
"unit": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"amount": {
"type": "number"
},
"number": {
"type": "number"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Operador en op y su valor. enum y user: is o isNot con values, o empty y notEmpty. text: contains con text. number: eq, gte o lte con number, o between con from y to. date: before o after con date (YYYY-MM-DD), dateBetween con from y to, last o next con amount y unit, overdue, o empty y notEmpty. boolean: isTrue o isFalse. En values van valores o etiquetas; \"none\" = sin valor; en personas también nombre, correo o \"me\".",
"additionalProperties": {}
},
"field": {
"enum": [
"name",
"code",
"status",
"owner",
"probability",
"impact",
"residualProbability",
"residualImpact",
"level",
"residualLevel",
"score",
"residualScore",
"grouped",
"hasResidualAssessment",
"createdAt",
"updatedAt"
],
"type": "string",
"description": "Con kind field."
},
"where": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Con kind relation: condiciones field o customField sobre los campos de la entidad relacionada."
},
"fieldId": {
"type": "string",
"description": "Con kind customField: el nombre del campo personalizado tal como lo dice el usuario."
},
"relation": {
"enum": [
"controls",
"processes",
"actionPlans",
"tasks",
"requirements",
"frameworks",
"audits",
"tags",
"evidences",
"policies"
],
"type": "string",
"description": "Con kind relation."
},
"quantifier": {
"enum": [
"anyOf",
"noneOf",
"any",
"none"
],
"type": "string",
"description": "Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids."
}
},
"description": "kind field: field y test. kind customField: fieldId y test. kind relation: relation, quantifier y, según el cuantificador, ids o where.",
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"groupBy": {
"anyOf": [
{
"type": "string",
"description": "Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1)."
},
{
"type": "object",
"required": [
"customField"
],
"properties": {
"customField": {
"type": "string"
}
},
"additionalProperties": {}
}
]
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 100,
"minimum": 1,
"description": "Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más."
}
},
"additionalProperties": {}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
[query] Busca, filtra, cuenta y agrupa POLÍTICAS. Para lo que DICE el documento de una política usa read_document con su id.
Ejemplos:
- "Políticas publicadas" → policy_search({filter: {conditions: [{kind: 'field', field: 'lifecycle', test: {op: 'is', values: ['PUBLICADA']}}]}})
- "Políticas que se revisan trimestralmente" → policy_search({filter: {conditions: [{kind: 'field', field: 'reviewFrequency', test: {op: 'is', values: ['QUARTERLY']}}]}})
- "Políticas con la revisión vencida" → policy_search({filter: {conditions: [{kind: 'field', field: 'reviewDate', test: {op: 'overdue'}}]}})
- "¿Cuántas políticas hay por etiqueta?" → policy_search({groupBy: 'tags', pageSize: 1})
- "La política de protección de datos" → policy_search({filter: {search: 'protección de datos'}})
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de políticas:
- title: text, "Título"; operadores contains, empty, notEmpty
- code: text, "Código"; operadores contains, empty, notEmpty
- lifecycle: enum, "Estado"; operadores is, isNot, empty, notEmpty; opciones: BORRADOR (Borrador), EN_REVISION (En revisión), APROBADO (Aprobado), PUBLICADA (Publicada), VENCIDA (Vencida)
- status: enum, "Estado de publicación"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)
- owner: user, "Responsable"; operadores is, isNot, empty, notEmpty
- approver: user, "Aprobador"; operadores is, isNot, empty, notEmpty
- reviewDate: date, "Fecha de revisión"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- reviewFrequency: enum, "Frecuencia de revisión"; operadores is, isNot, empty, notEmpty; opciones: WEEKLY (Semanal), MONTHLY (Mensual), QUARTERLY (Trimestral), BIANNUALLY (Semestral), ANNUALLY (Anual)
- requiresAcceptance: boolean, "Requiere aceptación"; operadores isTrue, isFalse
- createdAt: date, "Creado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- updatedAt: date, "Actualizado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- audits: auditorías
- controls: controles
- groups: audiencia
- tags: etiquetas
- risks: riesgos
- requirements: requerimientos
- frameworks: marcos
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs28/100
8 of 26 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Clear enough to supply this argument.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Clear enough to supply this argument.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
[query] Busca, filtra, cuenta y agrupa PROCESOS (macroprocesos, procesos y subprocesos).
Ejemplos:
- "Macroprocesos" → process_search({filter: {conditions: [{kind: 'field', field: 'level', test: {op: 'is', values: ['MACRO']}}]}})
- "Subprocesos directos del proceso Compras" → process_search({filter: {conditions: [{kind: 'relation', relation: 'parent', quantifier: 'anyOf', ids: ['Compras']}]}})
- "Todo lo que cuelga del proceso Compras" → process_search({filter: {conditions: [{kind: 'relation', relation: 'ancestors', quantifier: 'anyOf', ids: ['Compras']}]}})
- "Procesos sin riesgos" → process_search({filter: {conditions: [{kind: 'relation', relation: 'risks', quantifier: 'none'}]}})
- "El proceso de facturación" → process_search({filter: {search: 'facturación'}})
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de procesos:
- name: text, "Nombre"; operadores contains, empty, notEmpty
- code: text, "Código"; operadores contains, empty, notEmpty
- level: enum, "Nivel"; operadores is, isNot, empty, notEmpty; opciones: MACRO (Macroproceso), PROCESS (Proceso), SUBPROCESS (Subproceso)
- status: enum, "Estado"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)
- owner: user, "Responsable"; operadores is, isNot, empty, notEmpty
- createdAt: date, "Creado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- updatedAt: date, "Actualizado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- audits: auditorías
- risks: riesgos
- controls: controles
- frameworks: marcos
- tags: etiquetas
- parent: proceso padre
- ancestors: dentro de
Campos personalizados: condición con kind customField, fieldId (el nombre del campo, tal como lo dice el usuario) y test. Sus nombres y opciones varían por organización; se resuelven por nombre y, si no calzan, la respuesta trae los que existen.
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs27/100
8 of 27 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › fieldId
Con kind customField: el nombre del campo personalizado tal como lo dice el usuario.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Clear enough to supply this argument.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Clear enough to supply this argument.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy › anyOf › 1 › customField
Not provided
Missing description. Explain what this value means and how to supply it.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "process_search",
"title": "process_search",
"description": "[query] Busca, filtra, cuenta y agrupa PROCESOS (macroprocesos, procesos y subprocesos).\nEjemplos:\n- \"Macroprocesos\" → process_search({filter: {conditions: [{kind: 'field', field: 'level', test: {op: 'is', values: ['MACRO']}}]}})\n- \"Subprocesos directos del proceso Compras\" → process_search({filter: {conditions: [{kind: 'relation', relation: 'parent', quantifier: 'anyOf', ids: ['Compras']}]}})\n- \"Todo lo que cuelga del proceso Compras\" → process_search({filter: {conditions: [{kind: 'relation', relation: 'ancestors', quantifier: 'anyOf', ids: ['Compras']}]}})\n- \"Procesos sin riesgos\" → process_search({filter: {conditions: [{kind: 'relation', relation: 'risks', quantifier: 'none'}]}})\n- \"El proceso de facturación\" → process_search({filter: {search: 'facturación'}})\n\nEntrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).\nCondición de campo: kind field, field (la clave) y test (op y su valor). Campos de procesos:\n- name: text, \"Nombre\"; operadores contains, empty, notEmpty\n- code: text, \"Código\"; operadores contains, empty, notEmpty\n- level: enum, \"Nivel\"; operadores is, isNot, empty, notEmpty; opciones: MACRO (Macroproceso), PROCESS (Proceso), SUBPROCESS (Subproceso)\n- status: enum, \"Estado\"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)\n- owner: user, \"Responsable\"; operadores is, isNot, empty, notEmpty\n- createdAt: date, \"Creado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\n- updatedAt: date, \"Actualizado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\nCondición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:\n- audits: auditorías\n- risks: riesgos\n- controls: controles\n- frameworks: marcos\n- tags: etiquetas\n- parent: proceso padre\n- ancestors: dentro de\nCampos personalizados: condición con kind customField, fieldId (el nombre del campo, tal como lo dice el usuario) y test. Sus nombres y opciones varían por organización; se resuelven por nombre y, si no calzan, la respuesta trae los que existen.\n\nsort y search van dentro de filter, nunca al nivel superior.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Página solicitada, empieza en 1 (default 1)."
},
"filter": {
"type": "object",
"properties": {
"sort": {
"type": "object",
"required": [
"field",
"direction"
],
"properties": {
"field": {
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"additionalProperties": {}
},
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"match",
"conditions"
],
"properties": {
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Condiciones con la misma forma que las de filter.conditions."
}
},
"additionalProperties": {}
},
"description": "Grupos con su propio match: A AND (B OR C)."
},
"search": {
"type": "string",
"description": "Texto libre tolerante a typos sobre nombre, código y descripción."
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"enum": [
"field",
"relation",
"customField"
],
"type": "string"
},
"test": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"is",
"isNot",
"contains",
"eq",
"gte",
"lte",
"between",
"before",
"after",
"dateBetween",
"last",
"next",
"overdue",
"isTrue",
"isFalse",
"empty",
"notEmpty"
],
"type": "string"
},
"to": {
"type": [
"number",
"string"
]
},
"date": {
"type": "string"
},
"from": {
"type": [
"number",
"string"
]
},
"text": {
"type": "string"
},
"unit": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"amount": {
"type": "number"
},
"number": {
"type": "number"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Operador en op y su valor. enum y user: is o isNot con values, o empty y notEmpty. text: contains con text. number: eq, gte o lte con number, o between con from y to. date: before o after con date (YYYY-MM-DD), dateBetween con from y to, last o next con amount y unit, overdue, o empty y notEmpty. boolean: isTrue o isFalse. En values van valores o etiquetas; \"none\" = sin valor; en personas también nombre, correo o \"me\".",
"additionalProperties": {}
},
"field": {
"enum": [
"name",
"code",
"level",
"status",
"owner",
"createdAt",
"updatedAt"
],
"type": "string",
"description": "Con kind field."
},
"where": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Con kind relation: condiciones field o customField sobre los campos de la entidad relacionada."
},
"fieldId": {
"type": "string",
"description": "Con kind customField: el nombre del campo personalizado tal como lo dice el usuario."
},
"relation": {
"enum": [
"audits",
"risks",
"controls",
"frameworks",
"tags",
"parent",
"ancestors"
],
"type": "string",
"description": "Con kind relation."
},
"quantifier": {
"enum": [
"anyOf",
"noneOf",
"any",
"none"
],
"type": "string",
"description": "Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids."
}
},
"description": "kind field: field y test. kind customField: fieldId y test. kind relation: relation, quantifier y, según el cuantificador, ids o where.",
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"groupBy": {
"anyOf": [
{
"type": "string",
"description": "Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1)."
},
{
"type": "object",
"required": [
"customField"
],
"properties": {
"customField": {
"type": "string"
}
},
"additionalProperties": {}
}
]
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 100,
"minimum": 1,
"description": "Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más."
}
},
"additionalProperties": {}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
[query] Busca y filtra los MARCOS de cumplimiento PUBLICADOS de la organización. Para los requisitos, controles o riesgos de un marco usa requirements_search, control_search o risk_search con la relación frameworks.
Ejemplos:
- "¿Qué marcos tenemos?" → framework_search({})
- "El marco ISO" → framework_search({filter: {search: 'ISO'}})
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de marcos:
- name: text, "Nombre"; operadores contains, empty, notEmpty
- status: enum, "Estado"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)
- createdAt: date, "Creado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- updatedAt: date, "Actualizado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- requirements: requerimientos
- controls: controles
- risks: riesgos
- audits: auditorías
- tags: etiquetas
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs30/100
8 of 26 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Clear enough to supply this argument.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Clear enough to supply this argument.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Clear enough to supply this argument.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "framework_search",
"title": "framework_search",
"description": "[query] Busca y filtra los MARCOS de cumplimiento PUBLICADOS de la organización. Para los requisitos, controles o riesgos de un marco usa requirements_search, control_search o risk_search con la relación frameworks.\nEjemplos:\n- \"¿Qué marcos tenemos?\" → framework_search({})\n- \"El marco ISO\" → framework_search({filter: {search: 'ISO'}})\n\nEntrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).\nCondición de campo: kind field, field (la clave) y test (op y su valor). Campos de marcos:\n- name: text, \"Nombre\"; operadores contains, empty, notEmpty\n- status: enum, \"Estado\"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)\n- createdAt: date, \"Creado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\n- updatedAt: date, \"Actualizado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\nCondición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:\n- requirements: requerimientos\n- controls: controles\n- risks: riesgos\n- audits: auditorías\n- tags: etiquetas\n\nsort y search van dentro de filter, nunca al nivel superior.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Página solicitada, empieza en 1 (default 1)."
},
"filter": {
"type": "object",
"properties": {
"sort": {
"type": "object",
"required": [
"field",
"direction"
],
"properties": {
"field": {
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"additionalProperties": {}
},
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"match",
"conditions"
],
"properties": {
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Condiciones con la misma forma que las de filter.conditions."
}
},
"additionalProperties": {}
},
"description": "Grupos con su propio match: A AND (B OR C)."
},
"search": {
"type": "string",
"description": "Texto libre tolerante a typos sobre nombre, código y descripción."
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"enum": [
"field",
"relation"
],
"type": "string"
},
"test": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"is",
"isNot",
"contains",
"eq",
"gte",
"lte",
"between",
"before",
"after",
"dateBetween",
"last",
"next",
"overdue",
"isTrue",
"isFalse",
"empty",
"notEmpty"
],
"type": "string"
},
"to": {
"type": [
"number",
"string"
]
},
"date": {
"type": "string"
},
"from": {
"type": [
"number",
"string"
]
},
"text": {
"type": "string"
},
"unit": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"amount": {
"type": "number"
},
"number": {
"type": "number"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Operador en op y su valor. enum y user: is o isNot con values, o empty y notEmpty. text: contains con text. number: eq, gte o lte con number, o between con from y to. date: before o after con date (YYYY-MM-DD), dateBetween con from y to, last o next con amount y unit, overdue, o empty y notEmpty. boolean: isTrue o isFalse. En values van valores o etiquetas; \"none\" = sin valor; en personas también nombre, correo o \"me\".",
"additionalProperties": {}
},
"field": {
"enum": [
"name",
"status",
"createdAt",
"updatedAt"
],
"type": "string",
"description": "Con kind field."
},
"where": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Con kind relation: condiciones field o customField sobre los campos de la entidad relacionada."
},
"relation": {
"enum": [
"requirements",
"controls",
"risks",
"audits",
"tags"
],
"type": "string",
"description": "Con kind relation."
},
"quantifier": {
"enum": [
"anyOf",
"noneOf",
"any",
"none"
],
"type": "string",
"description": "Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids."
}
},
"description": "kind field: field y test. kind customField: fieldId y test. kind relation: relation, quantifier y, según el cuantificador, ids o where.",
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"groupBy": {
"type": "string",
"description": "Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1)."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 100,
"minimum": 1,
"description": "Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más."
}
},
"additionalProperties": {}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/100
[query] Busca, filtra, cuenta y agrupa REQUISITOS (requerimientos) de los marcos.
Ejemplos:
- "Requisitos del marco ISO 27001" → requirements_search({filter: {conditions: [{kind: 'relation', relation: 'frameworks', quantifier: 'anyOf', ids: ['ISO 27001']}]}})
- "Requisitos sin cobertura de controles" → requirements_search({filter: {conditions: [{kind: 'relation', relation: 'controls', quantifier: 'none'}]}})
- "El requisito A.5.1" → requirements_search({filter: {search: 'A.5.1'}})
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de requerimientos:
- title: text, "Título"; operadores contains, empty, notEmpty
- code: text, "Código"; operadores contains, empty, notEmpty
- section: enum, "Sección"; operadores is, isNot, empty, notEmpty
- category: enum, "Categoría"; operadores is, isNot, empty, notEmpty
- status: enum, "Estado"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)
- owner: user, "Responsable"; operadores is, isNot, empty, notEmpty
- createdAt: date, "Creado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
- updatedAt: date, "Actualizado"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- frameworks: marco
- controls: controles
- risks: riesgos
- audits: auditorías
- policies: políticas
- evidences: evidencias
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs29/100
8 of 26 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Clear enough to supply this argument.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Clear enough to supply this argument.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Clear enough to supply this argument.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "requirements_search",
"title": "requirements_search",
"description": "[query] Busca, filtra, cuenta y agrupa REQUISITOS (requerimientos) de los marcos.\nEjemplos:\n- \"Requisitos del marco ISO 27001\" → requirements_search({filter: {conditions: [{kind: 'relation', relation: 'frameworks', quantifier: 'anyOf', ids: ['ISO 27001']}]}})\n- \"Requisitos sin cobertura de controles\" → requirements_search({filter: {conditions: [{kind: 'relation', relation: 'controls', quantifier: 'none'}]}})\n- \"El requisito A.5.1\" → requirements_search({filter: {search: 'A.5.1'}})\n\nEntrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).\nCondición de campo: kind field, field (la clave) y test (op y su valor). Campos de requerimientos:\n- title: text, \"Título\"; operadores contains, empty, notEmpty\n- code: text, \"Código\"; operadores contains, empty, notEmpty\n- section: enum, \"Sección\"; operadores is, isNot, empty, notEmpty\n- category: enum, \"Categoría\"; operadores is, isNot, empty, notEmpty\n- status: enum, \"Estado\"; operadores is, isNot, empty, notEmpty; opciones: DRAFT (Borrador), IN_DESIGN (En diseño), PUBLISHED (Publicado)\n- owner: user, \"Responsable\"; operadores is, isNot, empty, notEmpty\n- createdAt: date, \"Creado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\n- updatedAt: date, \"Actualizado\"; operadores before, after, dateBetween, last, next, overdue, empty, notEmpty\nCondición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:\n- frameworks: marco\n- controls: controles\n- risks: riesgos\n- audits: auditorías\n- policies: políticas\n- evidences: evidencias\n\nsort y search van dentro de filter, nunca al nivel superior.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Página solicitada, empieza en 1 (default 1)."
},
"filter": {
"type": "object",
"properties": {
"sort": {
"type": "object",
"required": [
"field",
"direction"
],
"properties": {
"field": {
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"additionalProperties": {}
},
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"match",
"conditions"
],
"properties": {
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Condiciones con la misma forma que las de filter.conditions."
}
},
"additionalProperties": {}
},
"description": "Grupos con su propio match: A AND (B OR C)."
},
"search": {
"type": "string",
"description": "Texto libre tolerante a typos sobre nombre, código y descripción."
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"enum": [
"field",
"relation"
],
"type": "string"
},
"test": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"is",
"isNot",
"contains",
"eq",
"gte",
"lte",
"between",
"before",
"after",
"dateBetween",
"last",
"next",
"overdue",
"isTrue",
"isFalse",
"empty",
"notEmpty"
],
"type": "string"
},
"to": {
"type": [
"number",
"string"
]
},
"date": {
"type": "string"
},
"from": {
"type": [
"number",
"string"
]
},
"text": {
"type": "string"
},
"unit": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"amount": {
"type": "number"
},
"number": {
"type": "number"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Operador en op y su valor. enum y user: is o isNot con values, o empty y notEmpty. text: contains con text. number: eq, gte o lte con number, o between con from y to. date: before o after con date (YYYY-MM-DD), dateBetween con from y to, last o next con amount y unit, overdue, o empty y notEmpty. boolean: isTrue o isFalse. En values van valores o etiquetas; \"none\" = sin valor; en personas también nombre, correo o \"me\".",
"additionalProperties": {}
},
"field": {
"enum": [
"title",
"code",
"section",
"category",
"status",
"owner",
"createdAt",
"updatedAt"
],
"type": "string",
"description": "Con kind field."
},
"where": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Con kind relation: condiciones field o customField sobre los campos de la entidad relacionada."
},
"relation": {
"enum": [
"frameworks",
"controls",
"risks",
"audits",
"policies",
"evidences"
],
"type": "string",
"description": "Con kind relation."
},
"quantifier": {
"enum": [
"anyOf",
"noneOf",
"any",
"none"
],
"type": "string",
"description": "Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids."
}
},
"description": "kind field: field y test. kind customField: fieldId y test. kind relation: relation, quantifier y, según el cuantificador, ids o where.",
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"groupBy": {
"type": "string",
"description": "Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1)."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 100,
"minimum": 1,
"description": "Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más."
}
},
"additionalProperties": {}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
[query] Busca y filtra las PERSONAS de la organización actual (no las de otras organizaciones). Los ítems de las otras búsquedas ya traen a sus responsables como { id, name }, así que no hace falta user_search para eso.
Ejemplos:
- "¿Quiénes son los administradores?" → user_search({filter: {conditions: [{kind: 'field', field: 'role', test: {op: 'is', values: ['administrator']}}]}})
- "Administradores de solo lectura" → user_search({filter: {conditions: [{kind: 'field', field: 'role', test: {op: 'is', values: ['read_only_administrator']}}]}})
- "La persona María" → user_search({filter: {search: 'María'}})
Entrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).
Condición de campo: kind field, field (la clave) y test (op y su valor). Campos de personas:
- name: text, "Nombre"; operadores contains, empty, notEmpty
- email: text, "Correo"; operadores contains, empty, notEmpty
- code: text, "Código"; operadores contains, empty, notEmpty
- role: enum, "Rol"; operadores is, isNot, empty, notEmpty; opciones: member (Usuario), administrator (Administrador), read_only_administrator (Administrador de solo lectura), auditor (Auditor)
- invitation: enum, "Estado de invitación"; operadores is, isNot, empty, notEmpty; opciones: accepted (Aceptada), sent (Enviada), expired (Expirada), rejected (Revocada), not_sent (No enviada)
Condición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:
- groups: grupos
sort y search van dentro de filter, nunca al nivel superior.
The description explains the capability, when to use it, and what to expect.
Inputs24/100
8 of 26 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
filter › match
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › kind
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › field
Con kind field.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › test › op
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › values
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › text
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › number
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › from
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › to
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › date
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › amount
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › test › unit
Not provided
Missing description. Explain what this value means and how to supply it.
filter › conditions › items › relation
Con kind relation.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › quantifier
Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › conditions › items › ids
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "user_search",
"title": "user_search",
"description": "[query] Busca y filtra las PERSONAS de la organización actual (no las de otras organizaciones). Los ítems de las otras búsquedas ya traen a sus responsables como { id, name }, así que no hace falta user_search para eso.\nEjemplos:\n- \"¿Quiénes son los administradores?\" → user_search({filter: {conditions: [{kind: 'field', field: 'role', test: {op: 'is', values: ['administrator']}}]}})\n- \"Administradores de solo lectura\" → user_search({filter: {conditions: [{kind: 'field', field: 'role', test: {op: 'is', values: ['read_only_administrator']}}]}})\n- \"La persona María\" → user_search({filter: {search: 'María'}})\n\nEntrada: filter (match, conditions, groups, search, sort), groupBy, ids, page y pageSize (default 15).\nCondición de campo: kind field, field (la clave) y test (op y su valor). Campos de personas:\n- name: text, \"Nombre\"; operadores contains, empty, notEmpty\n- email: text, \"Correo\"; operadores contains, empty, notEmpty\n- code: text, \"Código\"; operadores contains, empty, notEmpty\n- role: enum, \"Rol\"; operadores is, isNot, empty, notEmpty; opciones: member (Usuario), administrator (Administrador), read_only_administrator (Administrador de solo lectura), auditor (Auditor)\n- invitation: enum, \"Estado de invitación\"; operadores is, isNot, empty, notEmpty; opciones: accepted (Aceptada), sent (Enviada), expired (Expirada), rejected (Revocada), not_sent (No enviada)\nCondición de relación: kind relation, relation (la clave), quantifier (anyOf o noneOf con ids, que acepta ids, nombres o códigos; any o none sin ids) y where opcional (condiciones sobre los campos de la entidad relacionada). Relaciones:\n- groups: grupos\n\nsort y search van dentro de filter, nunca al nivel superior.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Página solicitada, empieza en 1 (default 1)."
},
"filter": {
"type": "object",
"properties": {
"sort": {
"type": "object",
"required": [
"field",
"direction"
],
"properties": {
"field": {
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
}
},
"additionalProperties": {}
},
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"match",
"conditions"
],
"properties": {
"match": {
"enum": [
"all",
"any"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Condiciones con la misma forma que las de filter.conditions."
}
},
"additionalProperties": {}
},
"description": "Grupos con su propio match: A AND (B OR C)."
},
"search": {
"type": "string",
"description": "Texto libre tolerante a typos sobre nombre, código y descripción."
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"enum": [
"field",
"relation"
],
"type": "string"
},
"test": {
"type": "object",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"is",
"isNot",
"contains",
"eq",
"gte",
"lte",
"between",
"before",
"after",
"dateBetween",
"last",
"next",
"overdue",
"isTrue",
"isFalse",
"empty",
"notEmpty"
],
"type": "string"
},
"to": {
"type": [
"number",
"string"
]
},
"date": {
"type": "string"
},
"from": {
"type": [
"number",
"string"
]
},
"text": {
"type": "string"
},
"unit": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"amount": {
"type": "number"
},
"number": {
"type": "number"
},
"values": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Operador en op y su valor. enum y user: is o isNot con values, o empty y notEmpty. text: contains con text. number: eq, gte o lte con number, o between con from y to. date: before o after con date (YYYY-MM-DD), dateBetween con from y to, last o next con amount y unit, overdue, o empty y notEmpty. boolean: isTrue o isFalse. En values van valores o etiquetas; \"none\" = sin valor; en personas también nombre, correo o \"me\".",
"additionalProperties": {}
},
"field": {
"enum": [
"name",
"email",
"code",
"role",
"invitation"
],
"type": "string",
"description": "Con kind field."
},
"where": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"type": "string"
}
},
"additionalProperties": {}
},
"description": "Con kind relation: condiciones field o customField sobre los campos de la entidad relacionada."
},
"relation": {
"enum": [
"groups"
],
"type": "string",
"description": "Con kind relation."
},
"quantifier": {
"enum": [
"anyOf",
"noneOf",
"any",
"none"
],
"type": "string",
"description": "Con kind relation. anyOf o noneOf llevan ids (ids, nombres o códigos); any o none van sin ids."
}
},
"description": "kind field: field y test. kind customField: fieldId y test. kind relation: relation, quantifier y, según el cuantificador, ids o where.",
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"groupBy": {
"type": "string",
"description": "Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1)."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 100,
"minimum": 1,
"description": "Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más."
}
},
"additionalProperties": {}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
Missing description. Explain what this value means and how to supply it.
filter › search
Texto libre tolerante a typos sobre nombre, código y descripción.
Clear enough to supply this argument.
filter › sort › field
Not provided
Missing description. Explain what this value means and how to supply it.
filter › sort › direction
Not provided
Missing description. Explain what this value means and how to supply it.
groupBy
Clave de un campo enum, de persona o sí/no, o de una relación; cuenta todos los resultados por ese valor (usa pageSize 1).
Clear enough to supply this argument.
ids
Not provided
Missing description. Explain what this value means and how to supply it.
page
Página solicitada, empieza en 1 (default 1).
Clear enough to supply this argument.
pageSize
Ítems por página (1-100). Default 15 — mantiene el payload chico; pide la siguiente página si necesitas más.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
[query] Catalogo de consultas de SOLO LECTURA adicionales (auditoria, matrices de riesgo, campos personalizados, tags, verificaciones, risk-engine, documentos, comentarios y mas). Usalo cuando ningun *_search ni get_* cubre la pregunta: busca por tema y devuelve el nombre, la descripcion y el schema de argumentos de cada consulta, para ejecutarla despues con run_query.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
Tema o palabra clave (ej: "auditoria", "matriz", "campos personalizados", "verificaciones"). Vacio = listar todo.
Clear enough to supply this argument.
limit
Maximo de entradas a devolver (default 20).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "query_catalog",
"title": "query_catalog",
"description": "[query] Catalogo de consultas de SOLO LECTURA adicionales (auditoria, matrices de riesgo, campos personalizados, tags, verificaciones, risk-engine, documentos, comentarios y mas). Usalo cuando ningun *_search ni get_* cubre la pregunta: busca por tema y devuelve el nombre, la descripcion y el schema de argumentos de cada consulta, para ejecutarla despues con run_query.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximo de entradas a devolver (default 20)."
},
"search": {
"type": "string",
"description": "Tema o palabra clave (ej: \"auditoria\", \"matriz\", \"campos personalizados\", \"verificaciones\"). Vacio = listar todo."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
[query] Ejecuta UNA consulta del catalogo (query_catalog) por su nombre exacto, con los mismos permisos del usuario. Es el camino de lectura para todo lo que los *_search no cubren. Acota resultados grandes con fields (proyeccion de columnas) y limit (filas); si hay mas, la respuesta trae hasMore y nextOffset para pedir la pagina siguiente con offset.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
Nombre EXACTO de la consulta, tal como aparece en query_catalog.
Clear enough to supply this argument.
args
Argumentos segun el schema "args" del catalogo. Omitir cuando la consulta no lleva argumentos.
Clear enough to supply this argument.
fields
Proyeccion opcional: devolver SOLO estos campos de cada fila ("id" se incluye siempre). Usala para achicar resultados grandes.
Clear enough to supply this argument.
limit
Maximo de filas a devolver (default sin tope).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
Desde que fila empezar (para paginar). Usa el "nextOffset" que devuelve la llamada anterior. La mayoria de las consultas son chicas y no lo necesitan; para historiales largos (auditoria, actividad) prefiere los argumentos de cursor de la propia consulta si los tiene.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "run_query",
"title": "run_query",
"description": "[query] Ejecuta UNA consulta del catalogo (query_catalog) por su nombre exacto, con los mismos permisos del usuario. Es el camino de lectura para todo lo que los *_search no cubren. Acota resultados grandes con fields (proyeccion de columnas) y limit (filas); si hay mas, la respuesta trae hasMore y nextOffset para pedir la pagina siguiente con offset.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"args": {
"type": "object",
"description": "Argumentos segun el schema \"args\" del catalogo. Omitir cuando la consulta no lleva argumentos.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"name": {
"type": "string",
"description": "Nombre EXACTO de la consulta, tal como aparece en query_catalog."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Maximo de filas a devolver (default sin tope)."
},
"fields": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Proyeccion opcional: devolver SOLO estos campos de cada fila (\"id\" se incluye siempre). Usala para achicar resultados grandes."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Desde que fila empezar (para paginar). Usa el \"nextOffset\" que devuelve la llamada anterior. La mayoria de las consultas son chicas y no lo necesitan; para historiales largos (auditoria, actividad) prefiere los argumentos de cursor de la propia consulta si los tiene."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
[query] Busca en el Centro de ayuda de Skyward: las guías oficiales de CÓMO USAR la plataforma (subir evidencias, crear planes de acción, invitar usuarios, publicar controles, etc.).
Cuándo usarlo:
- El usuario pregunta CÓMO hacer algo EN la plataforma: "¿cómo subo una evidencia?", "¿cómo creo un plan de acción?", "¿cómo invito a alguien a mi organización?".
- El usuario pide ayuda para usar una pantalla o función de Skyward.
Cuándo NO usarlo:
- Preguntas sobre LOS DATOS de la organización (sus riesgos, controles, políticas) → usa los `*_search`.
- Conceptos generales de cumplimiento (qué es un riesgo residual) → respóndelos directamente.
Output: { items: [{ path, title, content, score }], rootPath } ordenado por relevancia. Responde usando el contenido del artículo y SIEMPRE deja el link al artículo copiando su `path` tal cual (template de links del Centro de ayuda); nunca lo reescribas a mano. Si items viene vacío o con error, sigue la instrucción del campo guidance — NUNCA inventes pasos de interfaz que no leíste en un artículo.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Tema o pregunta a buscar en el Centro de ayuda. Tolera typos y acentos.
Clear enough to supply this argument.
limit
Máximo de artículos a devolver, ordenados por relevancia.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "help_center_search",
"title": "help_center_search",
"description": "[query] Busca en el Centro de ayuda de Skyward: las guías oficiales de CÓMO USAR la plataforma (subir evidencias, crear planes de acción, invitar usuarios, publicar controles, etc.).\n\nCuándo usarlo:\n- El usuario pregunta CÓMO hacer algo EN la plataforma: \"¿cómo subo una evidencia?\", \"¿cómo creo un plan de acción?\", \"¿cómo invito a alguien a mi organización?\".\n- El usuario pide ayuda para usar una pantalla o función de Skyward.\n\nCuándo NO usarlo:\n- Preguntas sobre LOS DATOS de la organización (sus riesgos, controles, políticas) → usa los `*_search`.\n- Conceptos generales de cumplimiento (qué es un riesgo residual) → respóndelos directamente.\n\nOutput: { items: [{ path, title, content, score }], rootPath } ordenado por relevancia. Responde usando el contenido del artículo y SIEMPRE deja el link al artículo copiando su `path` tal cual (template de links del Centro de ayuda); nunca lo reescribas a mano. Si items viene vacío o con error, sigue la instrucción del campo guidance — NUNCA inventes pasos de interfaz que no leíste en un artículo.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 3,
"maximum": 5,
"minimum": 1,
"description": "Máximo de artículos a devolver, ordenados por relevancia."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Tema o pregunta a buscar en el Centro de ayuda. Tolera typos y acentos."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
[query] Busca palabras DENTRO del texto de los documentos cargados (el archivo vigente de evidencias, políticas y procedimientos), con búsqueda de texto completo en español que no distingue tildes.
Cuándo usarlo:
- El usuario pregunta qué documento MENCIONA algo: "¿qué política habla de teletrabajo?", "¿en qué evidencia aparece el proveedor Acme?", "busca 'respaldo diario' en los procedimientos".
- Necesitas encontrar qué documento leer antes de analizarlo.
Cuándo NO usarlo:
- Buscar entidades por nombre, estado, responsable u otros campos → usa los `*_search`.
- Analizar o resumir UN documento que ya identificaste → usa la herramienta de análisis de documentos con su id.
Output: { items: [{ entityType, entityId, name, url, fileName, snippet }] } ordenado por relevancia. `snippet` es un fragmento literal del documento con las coincidencias en **negrita**: cítalo como fragmento, no como el documento completo. Enlaza cada entidad con su `url` igual que en los demás `*_search`, copiándola tal cual. Solo ve documentos que el usuario puede ver. Si items viene vacío, con error o con partial: true, sigue la instrucción de guidance.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Palabras a buscar DENTRO del texto de los documentos, en español. Admite "frase exacta" entre comillas, OR y -palabra para excluir. No distingue tildes ni mayúsculas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
entityTypes
Limita a documentos de estas entidades: 'evidence' (evidencias), 'policy' (políticas), 'procedure' (procedimientos). Omítelo para buscar en todas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Máximo de resultados (por defecto 10, máximo 25).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations50/100
Declare idempotentHint, openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "content_search",
"title": "content_search",
"description": "[query] Busca palabras DENTRO del texto de los documentos cargados (el archivo vigente de evidencias, políticas y procedimientos), con búsqueda de texto completo en español que no distingue tildes.\n\nCuándo usarlo:\n- El usuario pregunta qué documento MENCIONA algo: \"¿qué política habla de teletrabajo?\", \"¿en qué evidencia aparece el proveedor Acme?\", \"busca 'respaldo diario' en los procedimientos\".\n- Necesitas encontrar qué documento leer antes de analizarlo.\n\nCuándo NO usarlo:\n- Buscar entidades por nombre, estado, responsable u otros campos → usa los `*_search`.\n- Analizar o resumir UN documento que ya identificaste → usa la herramienta de análisis de documentos con su id.\n\nOutput: { items: [{ entityType, entityId, name, url, fileName, snippet }] } ordenado por relevancia. `snippet` es un fragmento literal del documento con las coincidencias en **negrita**: cítalo como fragmento, no como el documento completo. Enlaza cada entidad con su `url` igual que en los demás `*_search`, copiándola tal cual. Solo ve documentos que el usuario puede ver. Si items viene vacío, con error o con partial: true, sigue la instrucción de guidance.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Máximo de resultados (por defecto 10, máximo 25)."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Palabras a buscar DENTRO del texto de los documentos, en español. Admite \"frase exacta\" entre comillas, OR y -palabra para excluir. No distingue tildes ni mayúsculas."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"entityTypes": {
"type": "array",
"items": {
"enum": [
"evidence",
"policy",
"procedure"
],
"type": "string"
},
"minItems": 1,
"description": "Limita a documentos de estas entidades: 'evidence' (evidencias), 'policy' (políticas), 'procedure' (procedimientos). Omítelo para buscar en todas."
}
}
},
"annotations": {
"readOnlyHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Lista los cambios del registro que la persona puede aplicar y que puedes PROPONER con propose_changes como kind "mutation": editar, cambiar responsable, eliminar, publicar, asociar o desasociar, etiquetar, crear políticas, planes, marcos o etiquetas, y más. Devuelve por herramienta su nombre (tool), qué hace, el schema de sus args, los campos que aceptan { ref } y la advertencia que verá la persona. Úsalo antes de proponer algo que no sea crear procesos, riesgos o controles, vincularlos o cargar evidencias.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
Palabra clave del cambio (ej: "responsable", "etiqueta", "publicar", "eliminar"). Vacío = todos los que la persona puede aplicar.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "proposable_changes",
"title": "Cambios que puedes proponer",
"description": "Lista los cambios del registro que la persona puede aplicar y que puedes PROPONER con propose_changes como kind \"mutation\": editar, cambiar responsable, eliminar, publicar, asociar o desasociar, etiquetar, crear políticas, planes, marcos o etiquetas, y más. Devuelve por herramienta su nombre (tool), qué hace, el schema de sus args, los campos que aceptan { ref } y la advertencia que verá la persona. Úsalo antes de proponer algo que no sea crear procesos, riesgos o controles, vincularlos o cargar evidencias.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"search": {
"type": "string",
"description": "Palabra clave del cambio (ej: \"responsable\", \"etiqueta\", \"publicar\", \"eliminar\"). Vacío = todos los que la persona puede aplicar."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Prepara una PROPUESTA de cambios (crear procesos, riesgos y controles, y asociarlos; o cargar un archivo adjunto como evidencia) que el usuario revisa en una tarjeta del chat. NO guarda nada: el usuario marca lo que quiere y la aplica, o la envía como sugerencia a los administradores si no tiene permiso. Un archivo adjunto (file_id del bloque [Archivos adjuntos]) se carga como versión nueva de una evidencia que ya existe con kind evidence_version (evidence.id de evidence_search), o, si no hay evidencia para eso, como evidencia nueva de un control con kind evidence; las evidencias no se envían como sugerencia: solo las aplica quien puede. Cada proceso, riesgo o control puede llevar código, responsable (owner.id de user_search) y campos personalizados; los riesgos y controles, además, requerimientos (ids de requirements_search). Para los campos personalizados: antes de proponerlos, obtén sus definiciones con run_query (riskCustomFieldDefinitions, controlCustomFieldDefinitions o processCustomFieldDefinitions) y usa el fieldId con el valor EXACTO de sus opciones. Para referirte a algo que ya existe, búscalo antes y usa su id. Cualquier otro cambio del registro (editar, cambiar el responsable, eliminar, publicar, etiquetar, asociar o desasociar, crear políticas, planes, marcos o etiquetas) va como kind mutation con la herramienta (tool) y los args que devuelve proposable_changes; donde un arg pide un id puedes poner { ref } de un paso anterior. Esos cambios solo los aplica quien tiene permiso: no se envían como sugerencia. La persona aprueba la propuesta en una tarjeta de este chat o en Skyward; tú nunca la aplicas.
The description explains the capability, when to use it, and what to expect.
Inputs20/100
12 of 54 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
summary
Título corto de la propuesta, ej: "Proceso de inventario con 2 riesgos y 1 control".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
rationale
Por qué se propone, en una frase, citando la fuente si la hay (acta, documento). Si buscaste algo y no apareció, di que no lo encontraste, no que no existe.
Clear enough to supply this argument.
items › items › ref
Identificador corto y único del paso, ej: "p1", "r1", "c1". Los pasos siguientes lo usan en { ref }.
Clear enough to supply this argument.
items › items › rationale
Not provided
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 0 › kind
Not provided
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 0 › name
Not provided
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 0 › code
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 6 › control › anyOf › 1 › id
Not provided
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 6 › file › id
Not provided
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 7 › kind
Not provided
Missing description. Explain what this value means and how to supply it.
items › items › operation › oneOf › 7 › tool
La herramienta del registro, tal como la lista proposable_changes.
Clear enough to supply this argument.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "propose_changes",
"title": "Proponer cambios",
"description": "Prepara una PROPUESTA de cambios (crear procesos, riesgos y controles, y asociarlos; o cargar un archivo adjunto como evidencia) que el usuario revisa en una tarjeta del chat. NO guarda nada: el usuario marca lo que quiere y la aplica, o la envía como sugerencia a los administradores si no tiene permiso. Un archivo adjunto (file_id del bloque [Archivos adjuntos]) se carga como versión nueva de una evidencia que ya existe con kind evidence_version (evidence.id de evidence_search), o, si no hay evidencia para eso, como evidencia nueva de un control con kind evidence; las evidencias no se envían como sugerencia: solo las aplica quien puede. Cada proceso, riesgo o control puede llevar código, responsable (owner.id de user_search) y campos personalizados; los riesgos y controles, además, requerimientos (ids de requirements_search). Para los campos personalizados: antes de proponerlos, obtén sus definiciones con run_query (riskCustomFieldDefinitions, controlCustomFieldDefinitions o processCustomFieldDefinitions) y usa el fieldId con el valor EXACTO de sus opciones. Para referirte a algo que ya existe, búscalo antes y usa su id. Cualquier otro cambio del registro (editar, cambiar el responsable, eliminar, publicar, etiquetar, asociar o desasociar, crear políticas, planes, marcos o etiquetas) va como kind mutation con la herramienta (tool) y los args que devuelve proposable_changes; donde un arg pide un id puedes poner { ref } de un paso anterior. Esos cambios solo los aplica quien tiene permiso: no se envían como sugerencia. La persona aprueba la propuesta en una tarjeta de este chat o en Skyward; tú nunca la aplicas.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"summary",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"ref",
"operation"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1,
"description": "Identificador corto y único del paso, ej: \"p1\", \"r1\", \"c1\". Los pasos siguientes lo usan en { ref }."
},
"operation": {
"oneOf": [
{
"type": "object",
"required": [
"kind",
"name"
],
"properties": {
"code": {
"type": "string",
"minLength": 1
},
"kind": {
"type": "string",
"const": "process"
},
"name": {
"type": "string",
"minLength": 1
},
"owner": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Responsable: un usuario de la organización, por su id.",
"additionalProperties": false
},
"parent": {
"anyOf": [
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1
}
},
"description": "Un paso anterior de esta misma propuesta, por su ref.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Una entidad que ya existe, por el id que devolvió una búsqueda.",
"additionalProperties": false
}
],
"description": "A qué entidad se refiere: { ref } o { id }."
},
"objective": {
"type": "string"
},
"description": {
"type": "string"
},
"customFields": {
"type": "array",
"items": {
"type": "object",
"required": [
"fieldId",
"value"
],
"properties": {
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Valor según el tipo del campo: texto, número, una opción exacta (select), lista de opciones exactas (multiselect), true/false, o fecha en epoch ms."
},
"fieldId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Id de la definición del campo personalizado."
}
}
}
}
}
},
{
"type": "object",
"required": [
"kind",
"name",
"description",
"probability",
"impact"
],
"properties": {
"code": {
"type": "string",
"minLength": 1
},
"kind": {
"type": "string",
"const": "risk"
},
"name": {
"type": "string",
"minLength": 1
},
"owner": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Responsable: un usuario de la organización, por su id.",
"additionalProperties": false
},
"impact": {
"enum": [
"MINIMAL",
"LOW",
"MEDIUM",
"HIGH",
"CRITICAL"
],
"type": "string"
},
"description": {
"type": "string"
},
"probability": {
"enum": [
"MINIMAL",
"LOW",
"MEDIUM",
"HIGH",
"CRITICAL"
],
"type": "string"
},
"customFields": {
"type": "array",
"items": {
"type": "object",
"required": [
"fieldId",
"value"
],
"properties": {
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Valor según el tipo del campo: texto, número, una opción exacta (select), lista de opciones exactas (multiselect), true/false, o fecha en epoch ms."
},
"fieldId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Id de la definición del campo personalizado."
}
}
}
},
"requirements": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"description": "Requerimientos del marco a los que se asocia, por su id."
}
}
},
{
"type": "object",
"required": [
"kind",
"name",
"description"
],
"properties": {
"code": {
"type": "string",
"minLength": 1
},
"kind": {
"type": "string",
"const": "control"
},
"name": {
"type": "string",
"minLength": 1
},
"owner": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Responsable: un usuario de la organización, por su id.",
"additionalProperties": false
},
"description": {
"type": "string",
"minLength": 1
},
"customFields": {
"type": "array",
"items": {
"type": "object",
"required": [
"fieldId",
"value"
],
"properties": {
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string"
}
}
],
"description": "Valor según el tipo del campo: texto, número, una opción exacta (select), lista de opciones exactas (multiselect), true/false, o fecha en epoch ms."
},
"fieldId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Id de la definición del campo personalizado."
}
}
}
},
"requirements": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"description": "Requerimientos del marco a los que se asocia, por su id."
}
}
},
{
"type": "object",
"required": [
"kind",
"process",
"risk"
],
"properties": {
"kind": {
"type": "string",
"const": "process_risk"
},
"risk": {
"anyOf": [
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1
}
},
"description": "Un paso anterior de esta misma propuesta, por su ref.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Una entidad que ya existe, por el id que devolvió una búsqueda.",
"additionalProperties": false
}
],
"description": "A qué entidad se refiere: { ref } o { id }."
},
"process": {
"anyOf": [
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1
}
},
"description": "Un paso anterior de esta misma propuesta, por su ref.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Una entidad que ya existe, por el id que devolvió una búsqueda.",
"additionalProperties": false
}
],
"description": "A qué entidad se refiere: { ref } o { id }."
}
}
},
{
"type": "object",
"required": [
"kind",
"control",
"risk"
],
"properties": {
"kind": {
"type": "string",
"const": "control_risk"
},
"risk": {
"anyOf": [
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1
}
},
"description": "Un paso anterior de esta misma propuesta, por su ref.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Una entidad que ya existe, por el id que devolvió una búsqueda.",
"additionalProperties": false
}
],
"description": "A qué entidad se refiere: { ref } o { id }."
},
"control": {
"anyOf": [
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1
}
},
"description": "Un paso anterior de esta misma propuesta, por su ref.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Una entidad que ya existe, por el id que devolvió una búsqueda.",
"additionalProperties": false
}
],
"description": "A qué entidad se refiere: { ref } o { id }."
}
}
},
{
"type": "object",
"required": [
"kind",
"evidence",
"file"
],
"properties": {
"file": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "El archivo que la persona adjuntó, por el file_id del bloque [Archivos adjuntos].",
"additionalProperties": false
},
"kind": {
"type": "string",
"const": "evidence_version"
},
"note": {
"type": "string",
"minLength": 1,
"description": "Nota de la versión, solo si la persona dio una."
},
"evidence": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "La evidencia que ya existe, por el id de evidence_search.",
"additionalProperties": false
}
}
},
{
"type": "object",
"required": [
"kind",
"name",
"control",
"file"
],
"properties": {
"file": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "El archivo que la persona adjuntó, por el file_id del bloque [Archivos adjuntos].",
"additionalProperties": false
},
"kind": {
"type": "string",
"const": "evidence"
},
"name": {
"type": "string",
"minLength": 1
},
"control": {
"anyOf": [
{
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"minLength": 1
}
},
"description": "Un paso anterior de esta misma propuesta, por su ref.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"description": "Una entidad que ya existe, por el id que devolvió una búsqueda.",
"additionalProperties": false
}
],
"description": "El control al que se asocia la evidencia nueva: { id } de control_search o { ref } de un control de esta propuesta."
}
}
},
{
"type": "object",
"required": [
"kind",
"tool",
"args"
],
"properties": {
"args": {
"type": "object",
"description": "Los argumentos de la herramienta según su schema. Donde la herramienta acepta un id, puedes usar { ref } de un paso anterior de esta propuesta.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
},
"kind": {
"type": "string",
"const": "mutation"
},
"tool": {
"enum": [
"action_plans__cancel",
"action_plans__complete",
"action_plans__create",
"action_plans__deleteActionPlan",
"action_plans__start",
"action_plans__updateDetails",
"compliance_frameworks__create",
"compliance_frameworks__edit",
"control_risks__disassociateRisk",
"controls__deleteControls",
"controls__updateData",
"controls__updateOwner",
"document_controls__associateControls",
"document_controls__disassociateControl",
"policies__associateControls",
"policies__create",
"policies__delete",
"policies__disassociateControl",
"policies__publish",
"policies__updateGeneralInformation",
"policies__updateOwner",
"process_risks__unlinkProcessRisk",
"requirements__addControl",
"requirements__addRisk",
"requirements__removeControl",
"requirements__removeRisk",
"requirements__setOwner",
"risks__deleteRisk",
"risks__updateAssessment",
"risks__updateRisk",
"tags__associate",
"tags__associateToPolicy",
"tags__associateToRisk",
"tags__create",
"tags__deassociate",
"tags__deassociateFromPolicy",
"tags__deassociateFromRisk"
],
"type": "string",
"description": "La herramienta del registro, tal como la lista proposable_changes."
}
}
}
]
},
"rationale": {
"type": "string"
}
}
},
"maxItems": 40,
"minItems": 1,
"description": "Los cambios, en orden: primero lo que se crea, después los vínculos que lo usan."
},
"summary": {
"type": "string",
"minLength": 1,
"description": "Título corto de la propuesta, ej: \"Proceso de inventario con 2 riesgos y 1 control\"."
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"rationale": {
"type": "string",
"description": "Por qué se propone, en una frase, citando la fuente si la hay (acta, documento). Si buscaste algo y no apareció, di que no lo encontraste, no que no existe."
}
},
"definitions": {
"__schema0": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/__schema0"
}
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"$ref": "#/definitions/__schema0"
}
}
]
}
}
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description59/100
Solo la usa la tarjeta de la propuesta cuando la persona aprueba o descarta. No la llames tú.
Describe the concrete operation and its scope instead of restating the tool name.
Inputs15/100
1 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
proposalId
Not provided
Missing description. Explain what this value means and how to supply it.
code
Not provided
Missing description. Explain what this value means and how to supply it.
action
Not provided
Missing description. Explain what this value means and how to supply it.
refs
Not provided
Missing description. Explain what this value means and how to supply it.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "skyward_resolve_proposal",
"title": "Aprobar o descartar una propuesta",
"description": "Solo la usa la tarjeta de la propuesta cuando la persona aprueba o descarta. No la llames tú.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"proposalId",
"code",
"action"
],
"properties": {
"code": {
"type": "string",
"minLength": 1
},
"refs": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
},
"action": {
"enum": [
"apply",
"suggest",
"discard"
],
"type": "string"
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"proposalId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Propone cambios a una matriz de riesgos (procesos, riesgos, controles y sus líneas) a partir de un documento normalizado, identificando cada fila por su código. Solo propone: crea un plan pendiente y no modifica la matriz. Devuelve el resumen del plan, los problemas que impiden aplicarlo y el enlace donde una persona con permiso para confirmar importaciones lo revisa y lo aplica en la plataforma. Nunca borra nada: lo que falta en el documento queda como está. Para el destino (target) necesitas el id de la matriz de riesgos o del marco: obtenlo con run_query y la consulta publishedFrameworksForAdmins, que lista los marcos publicados con sus matrices y requiere además el permiso para ver marcos; sin ese permiso, pide el id a quien administre la matriz. Los procesos, riesgos y controles se identifican por su código, y los campos personalizados por su etiqueta visible. Está disponible aunque whoami diga que las herramientas de escritura no lo están, porque no modifica la matriz.
The description explains the capability, when to use it, and what to expect.
Inputs26/100
7 of 23 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
document › target › anyOf › 0 › riskMatrixId
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
document › processes › items › code
Not provided
Missing description. Explain what this value means and how to supply it.
document › processes › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
document › processes › items › description
Not provided
Missing description. Explain what this value means and how to supply it.
document › processes › items › parentCode
Código del proceso padre, si lo tiene.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document › processes › items › customFields
Campos personalizados por su etiqueta visible en la plataforma. Un valor null se ignora: no borra el valor actual.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document › risks › items › code
Not provided
Missing description. Explain what this value means and how to supply it.
document › risks › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
document › risks › items › description
Not provided
Missing description. Explain what this value means and how to supply it.
document › risks › items › objective
Not provided
Missing description. Explain what this value means and how to supply it.
document › risks › items › probability
Nivel de la escala: la etiqueta de la organización (por ejemplo «Alta»), el nivel del 1 al 5 o MINIMAL, LOW, MEDIUM, HIGH o CRITICAL.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document › risks › items › impact
Nivel de la escala: la etiqueta de la organización (por ejemplo «Alta»), el nivel del 1 al 5 o MINIMAL, LOW, MEDIUM, HIGH o CRITICAL.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document › risks › items › customFields
Campos personalizados por su etiqueta visible en la plataforma. Un valor null se ignora: no borra el valor actual.
Clear enough to supply this argument.
document › controls › items › code
Not provided
Missing description. Explain what this value means and how to supply it.
document › controls › items › name
Not provided
Missing description. Explain what this value means and how to supply it.
document › controls › items › description
Not provided
Missing description. Explain what this value means and how to supply it.
document › controls › items › objective
Not provided
Missing description. Explain what this value means and how to supply it.
document › controls › items › customFields
Campos personalizados por su etiqueta visible en la plataforma. Un valor null se ignora: no borra el valor actual.
Clear enough to supply this argument.
document › lines › items › riskCode
Not provided
Missing description. Explain what this value means and how to supply it.
document › lines › items › controlCode
Not provided
Missing description. Explain what this value means and how to supply it.
document › lines › items › processCode
Not provided
Missing description. Explain what this value means and how to supply it.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Clear enough to supply this argument.
Annotations75/100
Declare openWorldHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "propose_matrix_plan",
"title": "Proponer un plan de cambios a la matriz",
"description": "Propone cambios a una matriz de riesgos (procesos, riesgos, controles y sus líneas) a partir de un documento normalizado, identificando cada fila por su código. Solo propone: crea un plan pendiente y no modifica la matriz. Devuelve el resumen del plan, los problemas que impiden aplicarlo y el enlace donde una persona con permiso para confirmar importaciones lo revisa y lo aplica en la plataforma. Nunca borra nada: lo que falta en el documento queda como está. Para el destino (target) necesitas el id de la matriz de riesgos o del marco: obtenlo con run_query y la consulta publishedFrameworksForAdmins, que lista los marcos publicados con sus matrices y requiere además el permiso para ver marcos; sin ese permiso, pide el id a quien administre la matriz. Los procesos, riesgos y controles se identifican por su código, y los campos personalizados por su etiqueta visible. Está disponible aunque whoami diga que las herramientas de escritura no lo están, porque no modifica la matriz.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"document"
],
"properties": {
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
},
"document": {
"type": "object",
"required": [
"target"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"riskCode",
"controlCode"
],
"properties": {
"riskCode": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"controlCode": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"processCode": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 1
},
{
"type": "null"
}
]
}
},
"description": "Una línea de la matriz: el riesgo que mitiga el control, por sus códigos, y opcionalmente el proceso.",
"additionalProperties": false
},
"maxItems": 5000
},
"risks": {
"type": "array",
"items": {
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"impact": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 1
},
{
"enum": [
1,
2,
3,
4,
5
],
"type": "number"
}
],
"description": "Nivel de la escala: la etiqueta de la organización (por ejemplo «Alta»), el nivel del 1 al 5 o MINIMAL, LOW, MEDIUM, HIGH o CRITICAL."
},
"objective": {
"type": "string",
"maxLength": 20000
},
"description": {
"type": "string",
"maxLength": 20000
},
"probability": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 1
},
{
"enum": [
1,
2,
3,
4,
5
],
"type": "number"
}
],
"description": "Nivel de la escala: la etiqueta de la organización (por ejemplo «Alta»), el nivel del 1 al 5 o MINIMAL, LOW, MEDIUM, HIGH o CRITICAL."
},
"customFields": {
"type": "object",
"description": "Campos personalizados por su etiqueta visible en la plataforma. Un valor null se ignora: no borra el valor actual.",
"propertyNames": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 200
}
]
}
}
},
"additionalProperties": false
},
"maxItems": 5000
},
"target": {
"anyOf": [
{
"type": "object",
"required": [
"riskMatrixId"
],
"properties": {
"riskMatrixId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
{
"type": "object",
"required": [
"complianceFrameworkId"
],
"properties": {
"complianceFrameworkId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
}
],
"description": "La matriz donde se escribe: el id de una matriz de riesgos o el id de un marco, uno de los dos."
},
"controls": {
"type": "array",
"items": {
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"objective": {
"type": "string",
"maxLength": 20000
},
"description": {
"type": "string",
"maxLength": 20000
},
"customFields": {
"type": "object",
"description": "Campos personalizados por su etiqueta visible en la plataforma. Un valor null se ignora: no borra el valor actual.",
"propertyNames": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 200
}
]
}
}
},
"additionalProperties": false
},
"maxItems": 5000
},
"processes": {
"type": "array",
"items": {
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"name": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"parentCode": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Código del proceso padre, si lo tiene."
},
"description": {
"type": "string",
"maxLength": 20000
},
"customFields": {
"type": "object",
"description": "Campos personalizados por su etiqueta visible en la plataforma. Un valor null se ignora: no borra el valor actual.",
"propertyNames": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 200
}
]
}
}
},
"additionalProperties": false
},
"maxItems": 5000
}
},
"additionalProperties": false
}
}
},
"annotations": {
"readOnlyHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Muestra el estado (pendiente, aplicado o descartado) y el resumen de un plan de cambios a la matriz, con el enlace para revisarlo en la plataforma.
The description explains the capability, when to use it, and what to expect.
Inputs38/100
1 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
planId
Not provided
Missing description. Explain what this value means and how to supply it.
chatLock
Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_matrix_plan",
"title": "Ver un plan de cambios a la matriz",
"description": "Muestra el estado (pendiente, aplicado o descartado) y el resumen de un plan de cambios a la matriz, con el enlace para revisarlo en la plataforma.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"planId"
],
"properties": {
"planId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chatLock": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Candado de organización de este chat. Lo entrega el selector de organización de matrix_builder_choose_organization después de que la persona elige con quién trabajar. Pásalo tal cual en cada llamada; nunca lo inventes ni uses uno de otro chat."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Control search[query] Busca, filtra, cuenta y agrupa CONTROLES.
02Tasks search[query] Busca, filtra, cuenta y agrupa las TAREAS de los planes de acción.
03Policy search[query] Busca, filtra, cuenta y agrupa POLÍTICAS.
04Content search[query] Busca palabras DENTRO del texto de los documentos cargados (el archivo vigente de evidencias, políticas y procedimientos), con búsqueda de texto comp…
05Help center search[query] Busca en el Centro de ayuda de Skyward: las guías oficiales de CÓMO USAR la plataforma (subir evidencias, crear planes de acción, invitar usuarios, p…
Want to run these tasks against your MCP server with us?
Skyward MCP setup, tools, quality score, publishing readiness, and alternatives.
How do I add Skyward MCP to Claude, ChatGPT, or Cursor?
Add Skyward MCP to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.skyward.ai/mcp.
Is Skyward MCP MCP ready for ChatGPT and Claude?
As of November 12, 2026, Skyward MCP scores 84/100 on Manufact's MCP publishing checklist. The scan does not yet meet ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Skyward MCP's MCP tool documentation?
As of November 12, 2026, Skyward MCP scores 63/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 31 of 31 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Skyward MCP?
As of November 12, 2026, alternatives to Skyward MCP in productivity on the Manufact MCP leaderboard include AdaptlyPost, Notion MCP, Paperpal, VantagePeers, and Date Calculator.
How can Skyward MCP improve its MCP documentation?
matrix_builder_guard_call is the lowest-scoring reviewed tool at 45/100. 0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.