Servidor MCP
Ostorlab expone un servidor MCP, que permite a los asistentes de IA y a los frameworks de agentes trabajar directamente con sus scans, vulnerabilidades, tickets y activos — sin necesidad de un cliente GraphQL personalizado.
Mientras que la API GraphQL le ofrece toda la superficie de la plataforma para construir integraciones, el servidor MCP proporciona a un cliente de IA un conjunto estructurado de herramientas tipadas que puede descubrir e invocar por sí mismo. Pregunte a su asistente «¿qué encontró el último scan de mi aplicación?» y elegirá las herramientas correctas, las encadenará y responderá.
Endpoint
https://api.ostorlab.co/apis/mcp/{api_key}/
El transporte es streamable HTTP. La clave de API forma parte de la ruta de la URL.
Warning
La barra final es obligatoria. Sin ella, el servidor responde con una redirección 307. Los clientes que siguen redirecciones funcionarán igualmente, pero pagarán un viaje de ida y vuelta adicional en cada petición; los clientes que no siguen redirecciones en POST fallarán.
Warning
La clave en la URL es una credencial. Las URL se registran habitualmente en los logs de proxy, el historial del navegador y el historial del shell, y los archivos de configuración de los clientes MCP suelen almacenarse en texto plano. Trate la URL del endpoint exactamente igual que la propia clave. Para retirar una clave, revóquela — establecer una fecha de expiración no impide que la clave siga funcionando en esta ruta.
Obtención de una clave de API
Cree una desde la aplicación web en Integrations/API → API Keys
(https://report.ostorlab.co/integrations/api). El rol de la clave determina lo que las
herramientas MCP pueden hacer — véase Permisos.
Conexión de un cliente
La mayoría de los clientes solicitan un nombre de servidor, un transporte y una URL. El transporte es
streamable HTTP; cuando un cliente pida un tipo, use http.
Claude Code
claude mcp add --transport http ostorlab https://api.ostorlab.co/apis/mcp/YOUR_API_KEY/
Claude Desktop, Cursor, VS Code, Windsurf, Zed
Estos clientes leen un archivo de configuración JSON. Su ubicación varía según el cliente y la plataforma — consulte la documentación de su cliente — pero la entrada tiene la misma forma:
{
"mcpServers": {
"ostorlab": {
"type": "http",
"url": "https://api.ostorlab.co/apis/mcp/YOUR_API_KEY/"
}
}
}
Algunos clientes llaman a la sección servers en lugar de mcpServers, y algunos usan
serverUrl en lugar de url. Si el suyo rechaza el bloque anterior, revise los nombres de las
claves en su documentación — el transporte y la URL son lo que importa.
Confirmación de funcionamiento
Pida al cliente que ejecute una herramienta de lectura, por ejemplo listar sus scans. Una clave
inválida devuelve Invalid API Key. Pedir la lista de herramientas no es una comprobación útil:
la lista se devuelve para cualquier clave, válida o no.
Permisos
Cada herramienta comprueba los permisos de la clave de API antes de hacer nada. Las claves llevan un rol. Un rol concede un conjunto de acciones. Cada herramienta requiere una acción.
| Tipo de herramienta | Acción requerida |
|---|---|
| Leer scans, vulnerabilidades, tickets, comentarios y checklists | read |
| Crear o modificar tickets, comentarios y checklists | write |
| Triar vulnerabilidades | write |
| Iniciar, reejecutar y detener scans | write |
| Listar activos y tags de la superficie de ataque | attack_surface_read |
| Aceptar o rechazar activos descubiertos, y agregar, modificar o eliminar tags | attack_surface_audit |
| Leer y triar la cola de descubrimiento, y leer el grafo de la superficie de ataque | attack_surface_audit, excepto el grafo que requiere attack_surface_read |
| Gestionar claves de API, usuarios y single sign-on, leer el registro de auditoría, leer y modificar la configuración de la organización, gestionar agentes de tickets, scanners y grupos de scanners, crear reglas de automatización, y configurar, leer o eliminar la mayoría de las integraciones | admin |
Una clave sin la acción requerida recibe un error claro en lugar de un resultado parcial.
Los roles se asignan a las acciones de la siguiente manera:
| Rol | read |
write |
admin |
attack_surface_read |
attack_surface_audit |
|---|---|---|---|---|---|
reader |
sí | no | no | sí | no |
user |
sí | sí | no | sí | sí |
admin |
sí | sí | sí | sí | sí |
attack_surface_auditor |
no | no | no | sí | sí |
De esa tabla se derivan dos conclusiones. Cualquier rol dispone de attack_surface_read, por lo
que cualquier clave puede invocar list_assets y list_tags. Y una clave attack_surface_auditor
no tiene ni read ni write, por lo que se limita a las herramientas de superficie de ataque:
puede leer activos y tags, y puede aceptarlos, rechazarlos y editarlos, pero no puede ver un scan,
una vulnerabilidad ni un ticket.
Si su organización tiene habilitado el acceso a nivel de objeto, las herramientas lo respetan, siguiendo las mismas reglas que la ruta de clave de API en GraphQL:
- Scans y tickets — una clave que no sea admin solo ve los scans y tickets individuales que se le han concedido.
- Activos — la concesión es sobre el propietario (owner), no sobre el activo. Una clave ve
todos los activos pertenecientes a los propietarios que se le han concedido. Use
list_ownerspara ver qué propietarios puede alcanzar una clave y, por lo tanto, qué activos puede ver.
Herramientas disponibles
Las siguientes tablas agrupan las herramientas según el recurso sobre el que operan. Cada tabla indica la acción que debe poseer la clave, para que pueda determinar de un vistazo qué herramientas puede alcanzar una clave con un rol determinado.
El servidor siempre se describe a sí mismo. Cada herramienta incluye su propia descripción y su propia lista de argumentos, y el cliente lee ambas al conectarse. Si una herramienta no figura aquí, pida a su cliente que muestre su lista de herramientas — esa es la respuesta autoritativa para el servidor con el que se está comunicando.
Scans
| Herramienta | Acción | Descripción |
|---|---|---|
list_scans |
read |
Lista scans, filtrados por status, asset_id, scan_profile, risk_rating, created_after, archived. |
get_scan |
read |
Los detalles de un scan. |
get_scan_status |
read |
El progreso de un scan, su historial reciente de estados y los errores que haya reportado. |
list_scan_profiles |
read |
Los perfiles de scan que la organización puede ejecutar, con los nombres exactos que espera create_scan. |
search_store_applications |
read |
Busca una aplicación en las tiendas móviles públicas para obtener el nombre y paquete que espera create_scan. |
create_scan |
write |
Inicia un scan contra un objetivo web, de red o de tienda móvil. |
create_source_code_scan |
write |
Inicia un scan de un repositorio Git. |
create_source_code_archive_scan |
write |
Inicia un scan de un archivo comprimido de código fuente que haya subido. |
create_mobile_file_scan |
write |
Inicia un scan de un binario móvil que haya subido. |
create_multi_asset_scan |
write |
Inicia un scan que cubre varios objetivos simultáneamente. |
create_mobile_testflight_scan |
write |
Inicia un scan de una build de iOS distribuida a través de TestFlight. |
create_autodiscovery_scan |
write |
Inicia un scan en toda la superficie de ataque descubierta de la organización. |
create_rescan |
write |
Vuelve a ejecutar un scan existente con el mismo activo, perfil, credenciales y configuración. |
stop_scan |
write |
Detiene un scan en ejecución. |
generate_scan_report |
write |
Genera un informe PDF para un scan y devuelve un enlace para descargarlo. |
get_scan y get_scan_status no devuelven scans archivados, aunque list_scans pueda
listarlos. Invocarlos sobre un scan archivado devuelve Scan not found.
create_scan toma un asset_type de tipo web, network o mobile_store, y los campos del objetivo
asociados: urls para web, networks para red, y mobile_asset_type junto con application_name y
package_name para un objetivo de tienda móvil. También recibe scan_profile_name, que debe ser uno
de los nombres devueltos por list_scan_profiles. Si se envía un nombre que la organización no puede
ejecutar, la petición se rechaza de inmediato y el error indica los perfiles válidos, por lo que es
recomendable invocar primero list_scan_profiles.
create_rescan es la vía más directa cuando el objetivo ya ha sido escaneado previamente. Solo requiere
el id de un scan existente y copia todo a partir de él, evitando errores en la selección del perfil o del
activo. El nuevo scan se titula Rescan of <original title>, y siempre resulta visible incluso si el
original estaba oculto.
Otras herramientas inician scans contra objetivos que create_scan no cubre.
create_source_code_scan toma un repositorio Git. create_mobile_testflight_scan toma una build de iOS
distribuida mediante TestFlight. create_autodiscovery_scan no toma ningún objetivo: escanea todo el
conjunto de descubrimiento aceptado de la organización, abarcando todo lo que list_autodiscovery_assets
haya incorporado al inventario. create_multi_asset_scan toma varios objetivos combinados —web, red,
repositorio, tienda móvil y archivos subidos— y los ejecuta como un único scan.
Dos de ellas toman un archivo en lugar de un identificador de objetivo: create_mobile_file_scan
escanea un binario móvil y create_source_code_archive_scan escanea un archivo comprimido de código fuente.
Ambas reciben un identificador de carga (upload handle), descrito a continuación.
Subir un archivo para escanear
Los argumentos de una herramienta se envían en formato JSON, por lo que no pueden transportar los bytes de un archivo. Suba el archivo primero y pase el identificador devuelto a la herramienta de scan.
curl -X POST https://api.ostorlab.co/apis/upload/ \
-H "X-API-Key: <your-api-key>" \
-F "file=@app.apk"
La respuesta contiene un upload_id, junto con el nombre del archivo, su tamaño y el hash SHA-256
registrado por el servidor, lo que le permite verificar que el archivo llegó intacto:
{
"upload_id": "de6024a2-8af5-4e0c-87d2-fdc2c306225f",
"filename": "app.apk",
"size": 4171034,
"sha256": "4ad2930d93c3af606582b26c55ac285485e9623bb508dbf05e5d391b8e4b0969",
"expires_at": "2026-09-10T09:44:04Z"
}
Pase ese upload_id como application_upload_id a create_mobile_file_scan, como
archive_upload_id a create_source_code_archive_scan, o en una de las listas de subida que acepta
create_multi_asset_scan.
Tres consideraciones sobre un identificador de carga:
- Pertenece a la organización que lo subió. Un identificador de otra organización se rechaza igual
que uno desconocido, devolviendo
Upload not found. - Expira. Tras su vencimiento, es rechazado con
Upload has expired. - Un scan lo consume. Una vez creado el scan, el identificador deja de resolver; es necesario subir el archivo de nuevo para ejecutar un segundo scan. Si la llamada falla, el identificador permanece utilizable, permitiendo reintentos sin volver a subir el archivo.
Warning
Cada herramienta create_* aquí descrita inicia un scan real y consume créditos de scan.
Haga que su cliente le muestre el objetivo y el perfil antes de invocarla.
Warning
generate_scan_report se bloquea hasta que el PDF esté finalizado, lo cual puede tardar algunos
minutos. Una respuesta lenta no indica un fallo. No interrumpa por timeout ni reintente antes
de recibir respuesta. La respuesta contiene una url, no el archivo en sí. Descargue esa URL
vía HTTPS incluyendo la misma clave de API en una cabecera X-API-Key.
Pentests con IA
Un pentest con IA —también denominado Agentic Deep Scan— pertenece a una categoría distinta a la de un scan convencional. Sus identificadores no coinciden con los de un scan y sus resultados se denominan riesgos (risks) en lugar de vulnerabilidades.
| Herramienta | Acción | Descripción |
|---|---|---|
get_agentic_deep_scan |
read |
Un pentest con IA: su estado, objetivo, tiempos y resumen. |
get_ai_pentest_usage |
read |
El consumo de tokens de IA que utilizó un pentest con IA. |
list_risks |
read |
Los riesgos identificados por un pentest con IA, filtrados por pentest y por severidad. |
list_ai_provider_api_keys |
read |
Las claves de API de proveedores de IA almacenadas por la organización. |
Note
Los riesgos no son devueltos por list_vulnerabilities ni por search_vulnerabilities, y un
pentest con IA no es devuelto por get_scan. Pasar el id de un pentest con IA a get_scan
devuelve Scan not found. —lo que significa «herramienta incorrecta», no «no existe». Un cliente
que solo conozca las herramientas de vulnerabilidades reportará erróneamente que el pentest con
IA no encontró nada.
Vulnerabilidades
| Herramienta | Acción | Descripción |
|---|---|---|
list_vulnerabilities |
read |
Hallazgos en un scan, filtrados por scan_id, risk_rating, kb_detail_id o el ticket al que pertenecen. |
search_vulnerabilities |
read |
Hallazgos a través de todos los scans, filtrados por activo, rango de fechas, severidad, detalle de base de conocimiento y texto libre. |
get_vulnerability |
read |
Un hallazgo: detalle técnico, detalle de explotación, vectores CVSS y metadatos de ubicación. |
update_vulnerability |
write |
Triaje: establecer un nivel de riesgo personalizado o vector CVSS, o marcar un hallazgo como falso positivo o excepción aceptada. |
Use search_vulnerabilities cuando la consulta abarque más de un scan —«todos los hallazgos críticos
en esta aplicación», «¿qué encontramos el mes pasado?». Use list_vulnerabilities únicamente cuando
ya disponga del id de un scan concreto. No itere con list_vulnerabilities sobre una lista de scans
para resolver una pregunta que search_vulnerabilities responde en una sola invocación.
Dos aspectos clave sobre update_vulnerability:
- Marcar un hallazgo como falso positivo o excepción actúa sobre los tickets vinculados a ese hallazgo. Un hallazgo sin ticket permanece sin cambios, y la llamada igualmente reporta éxito.
- Su parámetro
all_vulnerabilitiesaplica el cambio a todos los hallazgos del mismo scan que compartan el mismo detalle de la base de conocimiento, y recalcula el nivel de riesgo global del scan. El radio de impacto es mucho mayor que un único hallazgo.
Cada hallazgo lleva un campo dna —una huella derivada del título, detalle técnico y ubicación del
hallazgo. La misma incidencia detectada en un scan posterior conserva el mismo dna siempre que esos
tres elementos no varíen, lo que resulta muy útil para deduplicar al importar hallazgos a otros sistemas.
No se garantiza estabilidad si el detalle técnico cambia entre ejecuciones.
Artefactos de scan
Un scan recopila más información aparte de los hallazgos. Estas herramientas leen los artefactos capturados por un scan durante su ejecución.
| Herramienta | Acción | Descripción |
|---|---|---|
list_api_endpoints |
read |
Los endpoints de API descubiertos por un scan. |
list_http_traffic |
read |
Los intercambios HTTP capturados por un scan. |
list_http_folders |
read |
Las carpetas HTTP observadas por un scan. |
list_pcap_files |
read |
Las capturas de paquetes (PCAP) producidas por un scan. |
list_ide_files |
read |
Los archivos localizados dentro del binario del scan. |
list_ide_functions |
read |
Las funciones descompiladas a partir del binario del scan. |
list_ide_logs |
read |
Los registros de ejecución capturados en el dispositivo mientras se conducía la aplicación. |
list_call_ui_nodes |
read |
Las pantallas alcanzadas por un scan móvil mientras interactuaba con la aplicación. |
list_stack_traces |
read |
Las trazas de pila (stack traces) registradas mientras se ejecutaba la aplicación. |
La información recopilada depende del tipo de scan ejecutado. Un scan web contiene tráfico HTTP pero carece de binario descompilado; un scan móvil puede incluir ambos. Un resultado vacío indica que ese scan no recopiló elementos de esa naturaleza, no que el scan haya fallado.
Tickets
| Herramienta | Acción | Descripción |
|---|---|---|
list_tickets |
read |
Tickets, filtrados por status, priority, assigned_email, agent, tag, title, created_since, modified_since. Ordenables, con un limit. |
get_ticket |
read |
Un ticket, por id o por clave (por ejemplo os-1234). |
create_ticket |
write |
Crea un ticket, opcionalmente con tags, un asignado, un agente de ticket y una fecha límite. |
update_ticket |
write |
Modifica cualquiera de esos mismos campos. |
delete_ticket |
write |
Elimina un ticket. Acción irreversible. |
Comentarios y checklists
| Herramienta | Acción | Descripción |
|---|---|---|
list_comments, create_comment, update_comment, delete_comment |
read para listar, write para el resto |
Hilo de comentarios en un ticket. |
list_checklists, create_checklist, update_checklist, delete_checklist |
read para listar, write para el resto |
Checklists de remediación adjuntas a un ticket. |
create_checklist_item, update_checklist_item, delete_checklist_item |
write |
Elementos individuales de una checklist. |
Note
Agregar un comentario a un ticket que tiene un agente de tickets asignado iniciará una ejecución del agente.
Los comentarios creados a través de MCP no llevan autor asociado, ya que el servidor autentica una clave de API en lugar de un usuario. En la aplicación web se muestran sin autor.
Agentes de tickets
Un agente de tickets es un agente de IA que la plataforma puede ejecutar sobre un ticket para realizar labores de remediación. Para enrutar un ticket a un agente, simplemente asígnelo.
| Herramienta | Acción | Descripción |
|---|---|---|
list_ticket_agents |
read |
Los agentes a los que se pueden enrutar tickets, con un indicador enabled y un resumen de lo que ejecuta cada uno. |
assign_ticket_agent |
write |
Asigna un agente a un ticket, lo que inicia una ejecución. |
create_ticket_agent |
admin |
Agrega un nuevo agente, opcionalmente con la definición de ejecución que debe utilizar. |
update_ticket_agent |
admin |
Modifica el nombre, descripción o definición de ejecución de un agente. |
delete_ticket_agent |
admin |
Elimina un agente. |
Warning
Asignar un agente inicia una ejecución, y una ejecución no se puede deshacer. Una vez que un ticket
tiene un agente asignado, cada comentario posterior en ese ticket inicia otra ejecución. Lea el campo
agent_run en la respuesta para verificar si esta ejecución realmente inició o fue omitida —no asuma
que comenzó automáticamente.
Eliminar un agente anula la asignación en todos los tickets que lo tenían asociado. Los tickets se
conservan, pero su agente queda sin asignar; la única forma de restaurarlo es crear un nuevo agente y
asignarlo ticket por ticket. La respuesta incluye el contador unassigned_tickets, por lo que conviene
verificar dicha cifra antes de dar por sentado que un agente no está en uso. La definición de ejecución
del agente también se destruye y no puede consultarse en su totalidad antes de la eliminación:
list_ticket_agents devuelve únicamente un resumen ofuscado. Los valores de los argumentos nunca se
devuelven, por lo que estas herramientas no pueden utilizarse para extraer credenciales de un agente.
Ticket streams
Un ticket stream agrupa tickets para darles seguimiento conjunto a lo largo de un sprint, un lanzamiento o una iniciativa de seguridad.
| Herramienta | Acción | Descripción |
|---|---|---|
list_ticket_streams |
read |
Streams, filtrados por estado, por subcadena de nombre o por id de stream. |
get_ticket_stream |
read |
Detalles de un stream. |
create_ticket_stream |
write |
Crea un stream, opcionalmente con responsable, miembros, tickets asociados y fechas. |
update_ticket_stream |
write |
Modifica cualquiera de esos mismos campos. |
delete_ticket_stream |
write |
Elimina un stream. Los tickets y las cuentas de usuario referenciadas se conservan. |
member_emails y ticket_ids reemplazan el conjunto actual en lugar de añadir elementos a él. Para
agregar un miembro, pase la lista completa de los miembros con los que debe quedar el stream.
Activos e inventario
| Herramienta | Acción | Descripción |
|---|---|---|
list_assets |
attack_surface_read |
Activos de la superficie de ataque, filtrados por asset_type, owner_id, search, tags. |
create_asset |
write |
Registra un activo —dominio, aplicación, dirección IP, repositorio o nodo genérico— bajo un propietario. |
update_asset |
write |
Modifica el propietario, ubicación, color, nota, requisitos de CIA o tags de un activo. |
delete_asset |
write |
Elimina un activo del inventario. |
list_fingerprints |
attack_surface_read |
Las tecnologías observadas en todo el inventario. |
list_ports |
attack_surface_read |
Los puertos diferenciados observados en todo el inventario. |
list_protocols |
attack_surface_read |
Los protocolos diferenciados observados en todo el inventario. |
Un activo se identifica mediante la tupla asset_type y asset_id, y no únicamente por el id. Cada
subtipo de activo reside en su propia tabla, por lo que un mismo número representa activos diferentes
en subtipos distintos. Tanto update_asset como delete_asset requieren el par, y es el mismo par
que devuelve list_assets.
create_asset es idempotente para el mismo propietario: registrar un activo que ya existe allí devuelve
la fila existente con el flag created en false en lugar de fallar. Si el identificador ya existe bajo
un propietario distinto, la llamada se rechaza con un error genérico, evitando que una escritura pueda
usarse para descubrir activos que la clave no puede ver.
Eliminar un activo no elimina sus scans ni sus hallazgos. Los enlaces con el scan se desvinculan y los scans se conservan.
El parámetro tags en update_asset reemplaza la totalidad de las tags del activo; no realiza una fusión.
list_fingerprints, list_ports y list_protocols proporcionan un resumen del inventario en lugar de
listar fila por fila. Cada una devuelve los valores diferenciados observados en los activos alcanzables
por la clave, respondiendo a «¿qué tecnologías estamos ejecutando?» y «¿qué puertos están expuestos?» sin
tener que paginar por list_assets.
Owners
Un propietario (owner) representa a un equipo y define el límite sobre el cual se concede el acceso a nivel de objeto. Con el acceso a nivel de objeto habilitado, una clave ve los activos cuyo propietario puede alcanzar. Debe existir un propietario antes de poder asignarle activos.
| Herramienta | Acción | Descripción |
|---|---|---|
list_owners |
read |
Los propietarios de la organización, filtrados por subcadena de nombre. |
create_owner |
write |
Crea un propietario con nombre, tipo de propiedad y contacto y propietario superior opcionales. |
update_owner |
write |
Renombra un propietario, cambia su tipo, reasigna su contacto o lo mueve bajo otro propietario superior. |
delete_owner |
write |
Elimina un propietario. |
ownership_type debe ser uno de los siguientes: rejected, acquisition, third_party_service o internal.
Warning
delete_owner rechaza la eliminación mientras el propietario conserve activos asociados o candidatos
descubiertos pendientes apuntando hacia él. La eliminación nunca se propaga en cascada —los activos
se mantienen y el bloqueo existe precisamente para protegerlos. Si el propietario fuese eliminado
manteniendo activos asociados, todas las concesiones de acceso a nivel de objeto realizadas a través
de él se perderían, revocando silenciosamente la visibilidad de esos activos para las claves autorizadas
por esa vía. Reasigne o elimine primero los activos antes de eliminar al propietario.
Para una clave que no sea admin bajo control de acceso a nivel de objeto, list_owners devuelve los
propietarios concedidos a la clave junto con sus propietarios superiores. Una clave admin ve todos los
propietarios de la organización. Por lo tanto, un resultado vacío indica que la organización carece de
propietarios o que la clave no tiene acceso a ninguno de ellos.
Ubicaciones de activos
Una ubicación es un sitio o región etiquetado y opcionalmente anidado bajo el cual se pueden agrupar activos. Se trata únicamente de una etiqueta organizativa; no es un scanner ni determina dónde se ejecuta un scan.
| Herramienta | Acción | Descripción |
|---|---|---|
list_asset_locations |
read |
Las ubicaciones configuradas para la organización. |
create_asset_location |
write |
Crea una ubicación con un nombre, una dirección opcional y una ubicación superior opcional. |
update_asset_location |
write |
Renombra una ubicación, cambia su dirección o la mueve bajo otra ubicación superior. |
delete_asset_location |
write |
Elimina una ubicación. |
create_asset_location es idempotente: si se envía una ubicación con el mismo nombre, dirección y
ubicación superior, se devuelve tal cual con el flag created en false.
delete_asset_location rechaza la eliminación mientras haya activos vinculados a dicha ubicación o
ubicaciones secundarias anidadas bajo ella. La eliminación nunca se propaga en cascada: los activos y
las ubicaciones secundarias se conservan, motivo por el cual la operación se detiene. Reubique o retire
dichos elementos antes de eliminar la ubicación.
Activos descubiertos
El descubrimiento de superficie de ataque propone candidatos. Cada candidato permanece en una cola de revisión hasta que alguien lo acepta en el inventario o lo rechaza.
| Herramienta | Acción | Descripción |
|---|---|---|
list_autodiscovery_assets |
attack_surface_audit |
La cola de descubrimiento pendiente, filtrada por patrón de clave, tipo de candidato, rango de puntuación y propietario. |
accept_autodiscovery_asset |
attack_surface_audit |
Incorpora un candidato al inventario. |
reject_autodiscovery_asset |
attack_surface_audit |
Descarta un candidato. |
assign_potential_node_owner |
attack_surface_audit |
Asigna candidatos pendientes a un propietario. |
compute_potential_assets |
attack_surface_audit |
Recalcula la cola de inmediato en lugar de esperar a la siguiente ejecución programada. |
suggest_autodiscovery_domains |
attack_surface_audit |
Sugiere los dominios pertenecientes a una empresa a partir de una descripción en texto libre. |
get_attack_surface_graph |
attack_surface_read |
El entorno del grafo alrededor de uno o más puntos de partida. |
Warning
Aceptar un candidato hace que el activo sea escaneable y facturable —se incorpora al inventario,
se convierte en objetivo de scan y cuenta contra el plan de la organización. Tanto accept como reject
requieren un identificador explícito y carecen deliberadamente de operaciones por lotes o filtros,
impidiendo que un modelo vuelque toda la cola al inventario en una única llamada. Revise cada candidato
individualmente.
Rechazar un candidato cuya clave no coincide con ningún activo del inventario registra además dicha clave para que las ejecuciones de descubrimiento posteriores no vuelvan a proponerlo. Rechazar un candidato cuya clave coincide con un activo existente solo lo elimina de la cola, y una ejecución posterior podría volver a sugerirlo.
assign_potential_node_owner establece el propietario bajo el cual quedará el candidato antes de
que sea aceptado, asegurando que el activo ingrese al inventario correctamente atribuido a un equipo.
No acepta el candidato por sí mismo: este permanece en la cola hasta que se invoque
accept_autodiscovery_asset.
get_attack_surface_graph responde a «¿con qué está conectado esto?». Proporcione uno o más puntos de
partida y recorrerá las conexiones hacia el exterior, devolviendo el entorno alcanzado en dos listas
planas: los nodos y las aristas que los unen. La exploración está acotada, por lo que un punto de inicio
en una zona densa del grafo devuelve un entorno delimitado en lugar de la totalidad de elementos alcanzables.
compute_potential_assets ejecuta el descubrimiento bajo demanda sin esperar a la próxima ejecución
programada. Si ya hay una ejecución en marcha, la llamada se acopla a ella sin lanzar una segunda, por lo
que invocarla dos veces resulta inocuo.
Configuración del descubrimiento
El descubrimiento se orienta mediante un prompt que describe lo que la organización posee, garantizando que los candidatos propuestos correspondan a su empresa y no a entidades con nombres similares.
| Herramienta | Acción | Descripción |
|---|---|---|
get_attack_surface_agent_config |
read |
El prompt que guía el descubrimiento para la organización. |
create_attack_surface_agent_config |
write |
Establece dicho prompt. |
update_attack_surface_agent_config |
write |
Modifica el prompt. |
delete_attack_surface_agent_config |
write |
Elimina el prompt. |
suggest_autodiscovery_domains complementa estas herramientas: transforma una descripción en texto libre
de una empresa en una lista de dominios que probablemente le pertenezcan, facilitando la redacción del
prompt sin partir de cero. Solo sugiere —no añade nada a la cola ni al inventario.
Tags
Una tag es una tupla compuesta por name y value, por lo que el mismo nombre puede existir varias
veces con valores diferentes —env=prod y env=staging son dos tags distintas. Pase un value para
crear una de ellas. Omítalo si desea una etiqueta simple.
| Herramienta | Acción | Descripción |
|---|---|---|
list_tags |
attack_surface_read |
Las tags definidas en la organización, filtradas por subcadena de nombre. |
list_asset_tags |
attack_surface_read |
Las tags en uso real en los activos alcanzables por la clave. |
add_tag |
attack_surface_audit |
Crea una tag, con color, descripción e icono opcionales. |
update_tag |
attack_surface_audit |
Renombra o actualiza el estilo de una tag. |
delete_tags |
attack_surface_audit |
Elimina tags por id. |
delete_unused_tags |
attack_surface_audit |
Elimina todas las tags que no están referenciadas por ningún elemento. |
Los nombres de las tags son propios de cada organización, por lo que un nombre deducido al azar no
coincidirá con nada en lugar de fallar. Consulte list_tags antes de filtrar por una tag o asociarla.
update_tag modifica la tag en todos los lugares donde se utilice, de forma que cada ticket y activo
que la posea reflejará el nuevo nombre. No está diseñada para trasladar algunos elementos hacia otra tag.
Intentar renombrar una tag hacia un par name/value que ya posee otra tag existente será rechazado,
evitando fusiones no deseadas.
delete_tags desvincula la tag de cada ticket y activo que la contenía. Dichos tickets y activos se
conservan —solo se retira el enlace con la tag. La llamada es atómica (todo o nada): si algún id no se
encuentra o no es accesible, no se elimina nada y el error reporta los ids afectados.
list_tags devuelve todas las tags definidas en la organización, incluyendo aquellas no utilizadas.
list_asset_tags devuelve únicamente las tags en uso sobre activos alcanzables por la clave,
constituyendo una lista más concisa para seleccionar filtros.
delete_unused_tags no recibe identificadores. Elimina en una única llamada todas las tags que no están
referenciadas ni por tickets ni por activos, y dicha acción no se puede deshacer. Compare list_tags con
list_asset_tags previamente para saber con certeza qué tags se eliminarán.
Credenciales de prueba
Una credencial de prueba es un inicio de sesión reutilizable que la plataforma puede emplear para autenticarse durante la ejecución de un scan.
| Herramienta | Acción | Descripción |
|---|---|---|
list_test_credentials |
read |
Las credenciales almacenadas, filtradas por tipo y por subcadena de campos no secretos. |
create_test_credential |
write |
Almacena una nueva credencial de uno de los tipos soportados. |
update_test_credential |
write |
Reemplaza los valores de una credencial almacenada, manteniendo su id. |
delete_test_credential |
write |
Elimina una credencial. |
Los secretos almacenados nunca se devuelven. list_test_credentials proporciona los identificadores no
secretos y un indicador has_secret por cada fila.
update_test_credential realiza un reemplazo completo, no una fusión. Cualquier campo del tipo de
credencial que se omita será borrado, incluida la etiqueta credential_name. Envíe el valor actual de
cualquier campo que desee preservar. El credential_type debe coincidir con el tipo original con el que
se creó la credencial.
Es preferible utilizar update_test_credential en lugar de borrar y recrear al rotar credenciales: el
id se mantiene intacto, por lo que los scans ya configurados para utilizar dicha credencial continuarán
autenticándose. Eliminar una credencial provocará que dichos scans comiencen a fallar en la autenticación.
Scans programados
Una regla de programación (schedule rule) lanza scans con una cadencia recurrente, asegurando que la cobertura se mantenga actualizada entre scans puntuales.
| Herramienta | Acción | Descripción |
|---|---|---|
list_schedule_rules |
read |
Las reglas de programación de la organización, filtradas según si están activas o no. |
create_schedule_rule |
write |
Crea una regla sobre uno o más activos, con un perfil de scan y una cadencia. |
update_schedule_rule |
write |
Modifica los activos, perfil, cadencia o estado activo de una regla. |
delete_schedule_rule |
write |
Elimina una regla. Acción irreversible. |
La cadencia puede ser de dos tipos. Con cadence_type configurado en cron, crontab es una expresión
cron estándar de cinco campos como 0 16 * * * para ejecutarse diariamente a las 16:00. Con cadence_type
configurado en continuous, max_no_scan_duration_seconds establece el intervalo máximo permitido entre
dos scans de los activos cubiertos por la regla.
Warning
Una regla se crea desactivada por defecto, ya que una regla activa lanza scans recurrentes
facturables. Mantenga active en su valor por defecto, revise la regla con list_schedule_rules, y
únicamente entonces actívela. Envíe active=True en la creación solo si desea que la regla comience a
ejecutarse de inmediato.
update_schedule_rule permite activar una regla una vez verificada, pasando active=True. También es el
mecanismo para desactivarla temporalmente sin perderla. delete_schedule_rule elimina la regla de forma
definitiva; los scans que ya se hubiesen ejecutado se conservan.
Reglas de automatización
Una regla de automatización ejecuta una acción determinada cada vez que los hallazgos coinciden con una condición. Es el mecanismo mediante el cual se conectan la creación automática de tickets y el enrutamiento de notificaciones.
| Herramienta | Acción | Descripción |
|---|---|---|
list_automation_rules |
read |
Las reglas compartidas de la organización, filtradas por contexto y por estado de activación. |
list_action_definitions |
read |
Las acciones que una regla puede ejecutar y los argumentos que espera cada una. |
update_automation_rule |
write |
Modifica el nombre, condición, acción, contexto o alcance compartido de una regla, o la desactiva. |
delete_automation_rule |
write |
Elimina una regla. |
create_automation_rule |
admin |
Crea una regla a partir de un contexto, una consulta de filtrado y una única acción. |
context debe ser attack_surface, remediation o inventory. filter_query es la condición, escrita
como un array JSON, y debe contener al menos una entrada —un array vacío no aplica filtro alguno, por lo
que la regla coincidiría con cada elemento de su contexto.
Al igual que las reglas de programación, una nueva regla de automatización se crea desactivada.
Confirme la condición y la acción, y actívela posteriormente con update_automation_rule.
Para desactivar una regla conservándola, invoque update_automation_rule con active=False. Dicha acción
es reversible. delete_automation_rule no lo es.
Solo las reglas compartidas con toda la organización son visibles mediante una clave de API. Las reglas personales privadas de un usuario no se devuelven.
La acción ejecutada por la regla debe ser una de las definidas por la plataforma. Consulte
list_action_definitions antes de invocar create_automation_rule para verificar qué acciones existen
y qué parámetros requieren, en lugar de intentar deducir nombres de acción y procesar fallos.
Scanners
Un scanner es una máquina propia que ejecuta scans, de modo que el tráfico de scan se origina en su red en lugar de la red de Ostorlab. Un grupo de scanners reúne varios de ellos para que un scan pueda apuntar al grupo en lugar de a un único equipo.
| Herramienta | Acción | Descripción |
|---|---|---|
list_scanners |
read |
Los scanners que la organización puede utilizar. |
list_scanner_groups |
read |
Los grupos de scanners definidos en la organización. |
create_scanner |
admin |
Registra un scanner para permitirle vincular scans a él. |
update_scanner |
admin |
Modifica el nombre, descripción o pertenencia a grupos de un scanner. |
delete_scanner |
admin |
Da de baja un scanner. Acción irreversible. |
create_scanner_group |
admin |
Crea un grupo de scanners. |
update_scanner_group |
admin |
Modifica el nombre, descripción o scanners miembros de un grupo. |
delete_scanner_group |
admin |
Elimina un grupo de scanners. |
grant_scanner_access |
admin |
Permite que organizaciones secundarias ejecuten scans en uno de sus scanners. |
revoke_scanner_access |
admin |
Revoca dicho acceso. |
grant_scanner_access y revoke_scanner_access solo alcanzan organizaciones dependientes de la suya, y
el scanner debe ser propiedad de su organización. La concesión es atómica: una lista que incluya una
organización no subordinada se rechazará antes de escribir ningún cambio, evitando concesiones parciales.
Integraciones
| Herramienta | Acción | Descripción |
|---|---|---|
list_integrations |
read |
Las integraciones con terceros conectadas en la organización, con su estado de activación y destino no secreto. |
get_jira_ticket_map |
read |
Informa si un ticket fue enviado a Jira y en qué issue de Jira se convirtió. |
configure_jira_integration |
write |
Establece o reemplaza la URL del espacio de trabajo de Jira, credenciales y proyecto por defecto. |
configure_slack_integration |
write |
Agrega un webhook de Slack y selecciona qué eventos de finalización de scan notifican en él. |
create_servicenow_ticket |
write |
Envía un ticket a ServiceNow como un incidente. |
get_slack_integration |
admin |
Consulta los webhooks de Slack configurados y sus selectores de notificación. |
delete_git_pat_integration |
admin |
Elimina una integración de token de acceso personal (PAT) de Git. |
delete_servicenow_sync_config |
admin |
Elimina una configuración de sincronización de ServiceNow. |
Invoque list_integrations antes de cualquier acción que dependa de una integración —enviar un ticket,
emitir una notificación o mencionar un proveedor en una respuesta. Le permite conocer qué proveedores
están conectados, evitando tener que intentar la acción y leer un error para comprobarlo. Una integración
reportada como activa puede tener credenciales expiradas o revocadas; estas herramientas no pueden
determinar si funciona correctamente en tiempo real.
Ninguna de estas herramientas devuelve credenciales. Esto incluye tokens de API de Jira, secretos de OAuth, contraseñas y URLs de webhooks entrantes de Slack. Solo se devuelven campos no confidenciales autorizados.
Las dos herramientas de configuración se comportan de forma diferente ante llamadas repetidas. Jira
permite una única configuración por organización, por lo que invocar nuevamente configure_jira_integration
actualiza el mismo registro y sustituye las credenciales anteriores. Slack no tiene esta restricción, por
lo que llamar de nuevo a configure_slack_integration agrega un segundo webhook en lugar de modificar el
primero.
Warning
delete_git_pat_integration detiene los scans de código fuente y las pull requests de remediación
automática que dependían de él. El token almacenado se elimina de Ostorlab pero sigue siendo válido
en el proveedor, por lo que debe revocarlo en el proveedor por separado.
delete_servicenow_sync_config destruye además el registro de qué tickets ya habían sido enviados
bajo dicha configuración. Los incidentes de ServiceNow se conservan, pero se pierde el enlace desde
cada ticket de Ostorlab a su número de incidente, impidiendo el seguimiento o actualización de tickets
ya enviados. Eliminar la última configuración de sincronización activa impide por completo que los
tickets lleguen a ServiceNow.
La tabla anterior resume las herramientas principales. Las secciones siguientes detallan las herramientas adicionales para cada proveedor: dichas tablas amplían la lista en lugar de duplicarla.
Webhooks
Una integración de webhook es una URL propia hacia la cual Ostorlab envía notificaciones de eventos (POST).
| Herramienta | Acción | Descripción |
|---|---|---|
create_webhook_integration |
admin |
Define la URL donde Ostorlab publicará las notificaciones de eventos. |
update_webhook_integration |
admin |
Modifica el endpoint, cabeceras o estado activo de un webhook. |
delete_webhook_integration |
admin |
Elimina una integración de webhook. |
Slack
| Herramienta | Acción | Descripción |
|---|---|---|
update_slack_integration |
admin |
Modifica la URL de un webhook de Slack o sus selectores de notificación. |
delete_slack_integration |
admin |
Elimina un webhook de Slack. |
Dado que configure_slack_integration añade un nuevo webhook en lugar de reemplazar el anterior,
update_slack_integration es el método para modificar un webhook existente. Tanto este como
delete_slack_integration requieren un id, que corresponde al id devuelto por get_slack_integration.
Jira
| Herramienta | Acción | Descripción |
|---|---|---|
get_jira_integration |
admin |
La configuración de Jira almacenada, sin sus credenciales. |
test_jira_integration |
admin |
Ejecuta las comprobaciones de Jira y reporta cada resultado individualmente. |
create_jira_ticket_map |
write |
Registra que un ticket corresponde a una incidencia de Jira ya existente. |
update_jira_ticket_map |
write |
Reasigna el mapeo de Jira de un ticket hacia otra incidencia. |
delete_jira_ticket_map |
write |
Desvincula un ticket de su incidencia de Jira. |
create_jira_ticket |
write |
Crea una nueva incidencia en Jira para un ticket y registra la correspondencia. |
list_jira_metadata |
admin |
Los proyectos, tipos de incidencia y campos que las credenciales almacenadas pueden visualizar. |
Un ticket map es el enlace entre un ticket de Ostorlab y una incidencia de Jira, y get_jira_ticket_map
lo consulta. Las tres herramientas de escritura de mapeo gestionan dicho enlace manualmente para
incidencias creadas en Jira externamente a Ostorlab. Modifican únicamente el enlace. Ninguna de ellas
crea, edita ni elimina incidencias en Jira, por lo que desvincular un ticket deja intacta la incidencia
en Jira.
create_jira_ticket es la herramienta que sí interactúa directamente con Jira. Crea una nueva incidencia
para el ticket y registra el mapeo en la misma llamada, siendo la herramienta adecuada cuando la incidencia
de Jira aún no existe. Ante un fallo no se crea nada —ni incidencia ni mapeo— y se especifica la causa,
de forma que si las credenciales no tienen acceso a un proyecto se informa claramente en lugar de arrojar
un error genérico.
list_jira_metadata permite consultar los valores requeridos por create_jira_ticket y
configure_jira_integration: los proyectos accesibles para las credenciales, los tipos de incidencia
admitidos por cada proyecto y los campos disponibles para el mapeo. Un resultado vacío indica que las
credenciales no tienen acceso a ningún proyecto, lo que conviene verificar con test_jira_integration
antes de asumir un error en la herramienta.
test_jira_integration reporta cada verificación por su nombre, de modo que un fallo permite identificar
con precisión qué componente es incorrecto —la URL, las credenciales o el proyecto— en lugar de limitarse
a indicar un fallo indeterminado.
Linear
| Herramienta | Acción | Descripción |
|---|---|---|
configure_linear_integration |
admin |
Establece o reemplaza la conexión con Linear. |
get_linear_integration |
admin |
La configuración de Linear almacenada, sin sus credenciales. |
test_linear_integration |
admin |
Reporta si Linear está configurado, activo y accesible. |
list_linear_teams |
admin |
Los equipos de Linear sobre los cuales se pueden crear issues. |
ServiceNow
| Herramienta | Acción | Descripción |
|---|---|---|
configure_servicenow_integration |
admin |
Establece o reemplaza la conexión con ServiceNow. |
test_servicenow_integration |
admin |
Ejecuta las verificaciones de una configuración de ServiceNow y reporta cada resultado individualmente. |
delete_servicenow_integration |
admin |
Elimina una integración con ServiceNow. |
configure_servicenow_sync_config |
admin |
Mapea tickets hacia una tabla de ServiceNow y sus campos correspondientes. |
get_servicenow_sync_config |
read |
Muestra cómo una configuración de sincronización mapea tickets a una tabla. |
list_servicenow_fields |
read |
Las columnas de la tabla de ServiceNow a la que apunta una configuración de sincronización. |
get_servicenow_ticket_map |
read |
Informa si un ticket fue enviado a ServiceNow y en qué registro se convirtió. |
create_servicenow_ticket_map |
write |
Registra que un ticket corresponde a un registro de ServiceNow ya existente. |
update_servicenow_ticket_map |
write |
Reasigna el mapeo de un ticket hacia otro registro en ServiceNow. |
delete_servicenow_ticket_map |
write |
Desvincula un ticket de su registro en ServiceNow. |
ServiceNow se configura en dos pasos. configure_servicenow_integration almacena la instancia y sus
credenciales. configure_servicenow_sync_config define luego a qué tabla se envían los tickets y a qué
columna corresponde cada campo del ticket. Invoque primero list_servicenow_fields para consultar las
columnas reales de dicha tabla, garantizando que el mapeo utilice columnas válidas.
Las herramientas de correspondencia de tickets funcionan igual que las de Jira: gestionan el vínculo
entre un ticket de Ostorlab y un registro de ServiceNow sin alterar el registro en sí.
create_servicenow_ticket es la herramienta encargada de crear efectivamente un registro en ServiceNow.
Código fuente
| Herramienta | Acción | Descripción |
|---|---|---|
list_repositories |
read |
Los repositorios que Ostorlab puede alcanzar actualmente. |
create_git_pat_integration |
admin |
Registra un token de acceso personal (PAT) de Git. |
update_git_pat_integration |
admin |
Reemplaza un token almacenado o modifica su alcance. |
create_standard_git_integration |
admin |
Registra una instancia autohospedada de Git. |
update_standard_git_integration |
admin |
Modifica el registro de una instancia autohospedada de Git. |
delete_standard_git_integration |
admin |
Elimina el registro de una instancia autohospedada de Git. |
enable_github_app_connection |
admin |
Reanuda scans de código fuente y pull requests para los repositorios de una GitHub App. |
disable_github_app_connection |
admin |
Los detiene temporalmente, conservando la instalación. |
delete_github_app_connection |
admin |
Elimina la instalación de una GitHub App en la organización. |
update_source_code_oauth_integration |
admin |
Activa o desactiva una integración OAuth de código fuente. |
delete_source_code_oauth_integration |
admin |
Elimina una integración OAuth de código fuente. |
list_repositories es la herramienta a consultar antes de create_source_code_scan. Devuelve los
repositorios que las integraciones de código fuente conectadas exponen en ese momento, asegurando que se
escanee un recurso que la plataforma puede clonar realmente en lugar de un nombre aproximado.
disable_github_app_connection es la variante reversible de delete_github_app_connection. La
desactivación detiene scans y pull requests manteniendo la instalación, de modo que
enable_github_app_connection restaura la operatividad inmediatamente. La eliminación retira la
instalación por completo, exigiendo reinstalar la aplicación desde GitHub para recuperarla.
App Center
| Herramienta | Acción | Descripción |
|---|---|---|
create_app_center_integration |
admin |
Conecta una aplicación de App Center para que sus compilaciones se escaneen automáticamente. |
update_app_center_integration |
admin |
Modifica una integración de App Center. |
delete_app_center_integration |
admin |
Elimina una integración de App Center. |
Vanta
| Herramienta | Acción | Descripción |
|---|---|---|
get_vanta_auth_url |
admin |
El enlace a abrir en el navegador para autorizar a Ostorlab en Vanta. |
delete_vanta_integration |
write |
Desconecta Vanta. |
La conexión con Vanta requiere un navegador. get_vanta_auth_url proporciona el enlace que un usuario
debe abrir para autorizar a Ostorlab, y la vinculación se completa en dicho entorno y no a través de una
herramienta, impidiendo que un cliente complete este proceso de forma autónoma.
Organización y acceso
| Herramienta | Acción | Descripción |
|---|---|---|
me |
ninguna más allá de una clave válida | La organización a la que pertenece la clave y el rol que ostenta. |
list_shared_access_tokens |
read |
Los enlaces de compartición activos de la organización, con el scan que otorga cada uno y su frecuencia de uso. |
list_invitations |
read |
Las personas invitadas a la organización que aún no se han incorporado. |
create_shared_access_token |
write |
Crea un enlace que permite a personas sin cuenta visualizar un scan concreto. |
revoke_shared_access_token |
write |
Inhabilita inmediatamente un enlace de acceso compartido. |
list_organisation_users |
admin |
Quién tiene acceso a la organización, con qué rol y acotado a qué propietarios. |
add_user |
admin |
Invita a un usuario a unirse a la organización con un rol determinado. |
update_user_access |
admin |
Modifica el rol de un miembro o los propietarios a los que está asignado. |
revoke_user |
admin |
Retira el acceso de un usuario a la organización. |
review_invitation |
admin |
Acepta o rechaza una invitación pendiente. |
get_organisation_settings |
admin |
Los ajustes y permisos de la organización. |
update_organisation_settings |
admin |
Modifica las opciones de configuración que admiten escritura. |
list_api_keys |
admin |
Las claves de API de la organización: nombre, rol, fechas de creación y vencimiento, estado de revocación y forma enmascarada de la clave. |
update_api_key |
admin |
Restringe una clave: reduce su rol, retira asignaciones de propietarios, adelanta su vencimiento o la renombra. |
revoke_api_key |
admin |
Desactiva inmediatamente una clave de API. |
list_audit_actions |
admin |
Registro de qué usuario modificó qué elemento y cuándo, filtrado por rango temporal y por actor. |
me describe a la clave, no a un usuario humano. El servidor autentica una clave, por lo que la respuesta
a «¿quién soy?» corresponde a la organización a la que pertenece la clave y el nombre, prefijo, rol,
propietarios concedidos y fecha de vencimiento de la propia clave. No devuelve ninguna cuenta de usuario.
add_user envía una invitación en lugar de crear una cuenta directamente. El usuario figurará en
list_invitations hasta que acepte, momento en el cual aparecerá en list_organisation_users.
update_api_key únicamente puede restringir una clave. El rol establecido no puede ser superior al que la
clave ya posee, las asignaciones de propietarios pueden retirarse pero no añadirse, y el vencimiento solo
puede adelantarse en el tiempo. Por lo tanto, no es posible usarla para conceder privilegios adicionales a
una clave, y nunca revela material de clave.
La revocación es la única acción que invalida de inmediato una clave de API. Una fecha de vencimiento por
sí sola no lo hace: la clave continuará funcionando en la ruta MCP hasta que se marque como revoked.
revoke_api_key aplica dicha marca de forma irreversible. Una clave no puede revocarse a sí misma; esa
petición es rechazada, ya que cortaría la conexión en mitad de la sesión.
El texto en claro de una clave de API nunca es devuelto por ninguna herramienta. Existe únicamente en el
instante en que la clave es creada, almacenándose únicamente su hash con posterioridad. list_api_keys
devuelve en su lugar masked_key —el prefijo de la clave seguido de asteriscos, en el mismo formato
mostrado en la interfaz web y en la traza de auditoría. Utilice dicho formato cuando deba identificar una
clave ante otra persona.
Warning
Cualquier persona en posesión de un token de acceso compartido puede ver el scan al que apunta y sus
hallazgos sin necesidad de tener cuenta. Estos tokens no vencen. list_shared_access_tokens enumera
únicamente los enlaces activos en este momento, por lo que cada fila representa un acceso concedido
actualmente. El token sin procesar se devuelve solo una vez, en la respuesta a create_shared_access_token.
list_audit_actions devuelve una lista vacía en lugar de un error si la organización tiene desactivada
la auditoría de acciones. La respuesta incluye un campo message aclaratorio, evitando que «cero filas»
se interprete como «no ha habido actividad».
Inicio de sesión único (SSO)
| Herramienta | Acción | Descripción |
|---|---|---|
get_saml_config |
admin |
La configuración de inicio de sesión único (SSO) mediante SAML de la organización. |
configure_saml |
admin |
Configura el SSO mediante SAML por primera vez. |
update_saml |
admin |
Modifica la configuración SAML existente. |
configure_saml es una operación estricta de creación: se rechaza si la organización ya dispone de una
configuración y nunca sustituye una existente. update_saml es la herramienta para actualizar una
configuración preexistente y realiza una actualización parcial —únicamente se escriben los campos
enviados. Consulte previamente get_saml_config para comprobar cuál de las dos procede utilizar.
SLOs de remediación
Un SLO (Service Level Objective) en este contexto representa un plazo límite: el número máximo de días que un ticket de una severidad o prioridad determinada puede permanecer abierto.
| Herramienta | Acción | Descripción |
|---|---|---|
get_slo_config |
read |
Los plazos de la organización por severidad y prioridad, expresados en días. |
update_slo_config |
write |
Modifica dichos plazos. |
Un plazo establecido en null indica que no existe límite temporal para esa severidad o prioridad.
update_slo_config opera mediante actualización parcial: una clave enviada con un número positivo
establece dicho plazo, una clave enviada como null lo elimina, y cualquier clave omitida permanece sin
alteraciones. Si se envía una clave desconocida, la petición es rechazada.
Prompts de automatización de UI
| Herramienta | Acción | Descripción |
|---|---|---|
list_ui_automation_rules |
read |
Las reglas de automatización de interfaz de usuario disponibles para la organización. |
create_ui_prompts |
write |
Crea prompts de automatización de interfaz de usuario. |
update_ui_prompts |
write |
Modifica el código, nombre o descripción de los prompts de automatización de interfaz pertenecientes a su organización. |
delete_ui_prompts |
write |
Elimina prompts de automatización de UI pertenecientes a su organización. Acción irreversible. |
code representa un reemplazo completo y se sobrescribe en cada llamada, mientras que name y
description solo se modifican si se envían. Por ende, una invocación que solo pretenda renombrar un
prompt debe reenviar igualmente el código existente, o de lo contrario el código se sobrescribirá con lo
que se haya transmitido.
La llamada no es de tipo «todo o nada». Los prompts alcanzables se actualizan aun cuando otros no puedan serlo. La respuesta desglosa los identificadores actualizados y, para cada uno de los restantes, el motivo por el cual no se modificó.
list_ui_automation_rules devuelve también reglas que la organización no posee, correspondientes a las
reglas compartidas que cualquier organización puede emplear. Únicamente las que pertenecen a su
organización pueden modificarse o eliminarse, por lo que un prompt que figure correctamente en el listado
puede ser denegado por update_ui_prompts y delete_ui_prompts.
Base de conocimiento
La base de conocimiento contiene datos de referencia propios de Ostorlab. Es idéntica para todas las organizaciones y no representa una vista exclusiva de la suya, por lo que estas herramientas devuelven registros que no guardan relación directa con sus propios scans.
| Herramienta | Acción | Descripción |
|---|---|---|
list_cves |
read |
Registros de CVE, buscados por id, severidad o texto en la descripción. |
list_kb_applications |
read |
Las aplicaciones públicas monitorizadas por Ostorlab para detectar CVEs recién publicados. |
list_kb_targets |
read |
Registros que vinculan un CVE con las versiones de aplicación afectadas por él. |
list_app_cards |
read |
Las App Cards compartidas disponibles en Ostorlab. |
list_kb_targets actúa como punto de unión entre las otras dos: dado un CVE identifica las versiones de
aplicación afectadas, y dada una aplicación lista los CVEs publicados frente a ella.
Store de agentes
Un perfil de scan se compone de agentes. La tienda (store) constituye el catálogo de agentes existentes.
| Herramienta | Acción | Descripción |
|---|---|---|
search_agents |
read |
Busca en la tienda de agentes por nombre. |
get_agent |
read |
Un agente específico, con los argumentos que acepta su versión más reciente. |
search_agents representa el paso de descubrimiento y get_agent el paso de detalle: busque por nombre
para localizar la clave del agente y consulte a continuación los argumentos que dicha clave admite.
Exportaciones
Cada una de estas herramientas genera un archivo y devuelve un enlace hacia él, no el contenido directo.
Descargue dicha URL mediante HTTPS empleando la misma clave de API en la cabecera X-API-Key, de forma
idéntica a como opera generate_scan_report.
| Herramienta | Acción | Descripción |
|---|---|---|
export_scan |
read |
El archivo comprimido completo de un scan. |
export_scan_sarif |
read |
Los hallazgos de un scan en formato SARIF. |
export_vulnerabilities |
read |
Los hallazgos de un scan en formato CSV. |
export_tickets |
read |
Los tickets de remediación en formato CSV. |
export_assets |
attack_surface_read |
Los activos confirmados del inventario en formato CSV. |
export_potential_nodes |
attack_surface_read |
Los candidatos de descubrimiento pendientes en formato CSV. |
Las dos exportaciones de superficie de ataque requieren attack_surface_read, acción concedida a todos
los roles. Las cuatro restantes requieren read, por lo que una clave attack_surface_auditor puede
exportar activos y candidatos de descubrimiento, pero no scans, hallazgos ni tickets.
Límites de resultados
Toda herramienta de listado limita la cantidad de datos que devuelve. La forma en que la herramienta informa de dicho límite no es homogénea en toda la plataforma. Existen tres comportamientos:
Algunas herramientas devuelven un cursor. Un cursor es un token opaco que marca el punto donde
concluyó la página recibida. Se devuelve en el campo next_cursor. Envíe dicho valor en el argumento
cursor de la siguiente llamada para obtener la página posterior. Un valor null en next_cursor
indica que ha llegado a la última página. No intente interpretar ni construir cursores manualmente: su
estructura interna es un detalle de implementación y solo tiene sentido para la herramienta que lo generó.
Otras herramientas devuelven un valor booleano truncated. Este indica que existen más filas en el
servidor, pero no proporciona un cursor para obtenerlas. En tal caso, acote la consulta mediante filtros.
Unas pocas no devuelven ninguno de los dos indicadores. En ellas el límite opera de forma silenciosa: se recibe el número tope de filas sin señal alguna de la existencia de filas adicionales.
| Herramienta | Por defecto | Máximo | Cómo se señalan más filas |
|---|---|---|---|
list_scans |
200 | 200 | next_cursor |
list_vulnerabilities |
200 | 200 | next_cursor |
list_assets |
200 | 200 | next_cursor |
list_risks |
200 | 200 | next_cursor |
get_scan_status (historial de estados) |
50 | 50 | nada |
list_scan_profiles |
sin límite | sin límite | no aplicable |
list_checklists |
sin límite | sin límite | no aplicable |
search_vulnerabilities |
200 | 200 | truncated |
list_tags |
200 | 200 | next_cursor |
list_api_keys |
200 | 200 | truncated |
list_shared_access_tokens |
200 | 200 | truncated |
list_ticket_agents |
100 | 100 | truncated |
list_owners |
200 | 200 | next_cursor |
list_asset_locations |
200 | 200 | next_cursor |
list_autodiscovery_assets |
200 | 200 | next_cursor |
list_test_credentials |
200 | 200 | next_cursor |
list_integrations |
200 | 200 | next_cursor |
list_audit_actions |
200 | 200 | next_cursor |
list_organisation_users |
200 | 200 | next_cursor |
list_schedule_rules |
100 | 100 | next_cursor |
list_automation_rules |
100 | 100 | next_cursor |
get_slack_integration |
100 | 100 | next_cursor |
list_ticket_streams |
50 | 200 | next_cursor |
list_tickets |
50 | 200 | truncated y next_cursor |
list_comments |
50 | 200 | truncated y next_cursor |
Solicitar un límite superior al máximo lo ajusta automáticamente al tope en lugar de rechazar la
petición. Solicitar cero, un número negativo o un valor no numérico es rechazado con Invalid limit.
Un cursor está vinculado a los filtros con los que fue generado, por lo que reutilizarlo con filtros
diferentes será rechazado con Invalid cursor. en lugar de devolver silenciosamente la página errónea.
En las herramientas que no emiten ninguna señal, el tope representa toda la respuesta que obtendrá: un
scan con 500 entradas de estado devolverá 50 desde get_scan_status, sin indicación de que existen las
450 restantes. Acote mediante filtros cuando el recuento exacto sea relevante —no solicite a un modelo
que calcule totales a partir de una lista truncada.
Eliminación
Toda herramienta delete_* y revoke_* de esta página elimina datos de manera permanente. Esto abarca
delete_ticket, delete_comment, delete_checklist y delete_checklist_item, e igualmente
delete_asset, delete_owner, delete_asset_location, delete_tags, delete_unused_tags,
delete_test_credential, delete_scanner, delete_scanner_group, delete_schedule_rule,
delete_automation_rule, delete_ui_prompts, delete_ticket_agent, delete_ticket_stream,
delete_checklist, las operaciones de eliminación de integraciones, y revoke_api_key,
revoke_shared_access_token y revoke_user.
Algunas de ellas rechazan la acción en lugar de propagarse en cascada. delete_owner y
delete_asset_location no se ejecutarán mientras existan elementos que dependan de ellos, y delete_asset
conserva los scans y hallazgos vinculados al activo. En los casos en que una herramienta se propaga en
cascada o conserva datos, la sección descriptiva correspondiente lo especifica.
Las herramientas publican anotaciones (annotations) dirigidas al cliente. Una anotación es una indicación que acompaña a la herramienta en el catálogo y describe el impacto de su ejecución, permitiendo al cliente decidir si debe solicitar confirmación previa al usuario. Se emplean tres tipos:
readOnlyHint— la herramienta no altera el estado.destructiveHint— la herramienta altera el estado de forma irreversible.idempotentHint— invocar la herramienta dos veces produce el mismo efecto que invocarla una vez.
Las herramientas destructivas están debidamente señaladas, al igual que cualquier otra herramienta que elimine o sobrescriba datos.
Warning
Una anotación es una sugerencia, no un mecanismo de bloqueo estricto. La solicitud de confirmación depende exclusivamente de la implementación de su cliente. Ciertos clientes solicitan confirmación cada vez que se invoca una herramienta destructiva, otros solicitan autorización la primera vez y la recuerdan, y otros no preguntan en absoluto. El servidor procesará la llamada en cualquiera de los casos. Compruebe cómo gestiona su cliente las indicaciones destructivas antes de conectar un modelo a una clave con permisos de escritura.
No todas las herramientas incluyen anotaciones explícitas. Una herramienta sin anotaciones hace que el cliente adopte el comportamiento por defecto de la especificación MCP, asumiendo que la llamada es destructiva y no idempotente. Esto significa que una herramienta de solo lectura no anotada puede parecer más peligrosa para un cliente cauteloso de lo que realmente es.
Errores
Una herramienta que experimenta un fallo devuelve una respuesta estándar exitosa en cuyo cuerpo figura
el campo error:
{"error": "Invalid API Key."}
El indicador JSON-RPC isError permanece en false. Si su cliente bifurca su lógica evaluando
isError, interpretará los fallos de autenticación y de permisos como llamadas exitosas —inspeccione el
campo error en su lugar.
Ejemplos
Peticiones en lenguaje natural que funcionan de forma óptima una vez conectado el servidor:
- «Lista los scans finalizados en la última semana con nivel de riesgo alto.»
- «Muéstrame los hallazgos críticos del scan 12345 y abre un ticket para cada uno.»
- «¿Cuál es el detalle técnico de la vulnerabilidad 987 y hay comentarios registrados en su ticket?»
- «Marca la vulnerabilidad 654 como falso positivo.»
- «¿Qué tickets abiertos están asignados a rubberduck?»
- «¿Qué perfiles de scan podemos ejecutar contra un objetivo web? Inicia un Fast Scan sobre example.com.»
- «¿Cuáles de nuestras claves de API nunca han sido revocadas y fueron creadas hace más de un año?»
- «¿Qué candidatos figuran en la cola de descubrimiento de superficie de ataque con una puntuación superior a 80?»
Resolución de problemas
HTTP 404 al conectar
A la URL le falta el segmento de la clave de API o la barra diagonal final. Debe tener el formato
/apis/mcp/YOUR_API_KEY/.
Invalid API Key.
La clave de API no es reconocida. Verifique que fue copiada en su totalidad y que no ha sido revocada.
API Key does not have write permission.
La herramienta requiere un rol más elevado del que posee la clave. Emita una clave con el rol necesario.
Scan not found. para un scan visible en la aplicación web
Existen cuatro causas posibles: el scan está archivado (get_scan y get_scan_status rechazan scans
archivados), el scan pertenece a otra organización, su organización utiliza acceso a nivel de objeto y
dicha clave no tiene concedido ese scan, o el id corresponde a un pentest con IA en lugar de a un scan
convencional —las herramientas de scan no resuelven identificadores de pentests con IA, debiendo emplear
get_agentic_deep_scan para ellos. Un scan no accesible se reporta deliberadamente de la misma forma que
uno inexistente.