Consultar adjuntos descargados de una licitación
Consulta el estado y los adjuntos ya conservados por Connect, con los metadatos originales del portal y sin clasificar el contenido.
| Tool ID | mercadopublico.adjuntos.consultar |
| Nombre MCP | mercadopublico__adjuntos__consultar |
| Conector | mercadopublico |
| Plano | action |
| Scope (permiso) | mercadopublico:read |
| Auth | none |
| Versión | 1 |
| Sensible | no |
| Deprecado | no |
| Comportamiento | readOnly=true, destructive=false, idempotent=true, openWorld=false |
Requiere conexión. Indica cuál en cada llamada: header
X-Connect-Connectionen REST, campoconnectionIden elexecutede MCP y en las opciones del SDK. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale deconexiones.estado.consultar.
Qué hace
No abre el portal ni inicia una descarga. no_solicitada, pendiente y fallido no significan que una licitación carezca de adjuntos. Mientras una actualización está en curso, o si falla, entrega los documentos de la descarga anterior con resultadoAnterior en true; sólo una descarga exitosa los reemplaza.
Entrada
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
codigoLicitacion | string ^\d+-\d+-[A-Z0-9]+$ | sí | ID público de la licitación, por ejemplo 803-6-LE26. No acepta URLs. |
JSON Schema de entrada
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"codigoLicitacion": {
"type": "string",
"maxLength": 50,
"pattern": "^\\d+-\\d+-[A-Z0-9]+$",
"description": "ID público de la licitación, por ejemplo 803-6-LE26. No acepta URLs."
}
},
"required": [
"codigoLicitacion"
]
}Salida
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
codigoLicitacion | string | sí | ID público de la licitación consultada. |
estado | "no_solicitada" · "pendiente" · "procesando" · "disponible" · "parcial" · "fallido" | sí | Estado de la descarga solicitada a Connect. |
solicitadoEn | string | null | sí |
finalizadoEn | string | null | sí |
errorCodigo | string | null | sí |
consultarEnSegundos | entero | null | sí |
observadoEn | string | null | sí |
totalAnexos | entero | sí | Cantidad de anexos observados en el listado recorrido. |
completo | booleano | sí | Se recorrió todo el listado y se descargaron los adjuntos admitidos (PDF, Word, Excel, PNG y JPEG) dentro de los límites. Los formatos no admitidos o las descargas pendientes se informan en motivosIncompletitud. |
motivosIncompletitud | lista de string | sí | Razones por las que el inventario o las descargas requieren revisión. |
documentos | lista de objeto | sí | Todos los anexos observados en la grilla, sin clasificar su contenido: los descargados llevan enlace firmado; el resto indica su estado. |
documentos[].id | string | null | sí |
documentos[].nombre | string | sí | Nombre declarado por el comprador para el anexo. |
documentos[].descripcion | string | null | sí |
documentos[].tipo | string | null | sí |
documentos[].tamanoTexto | string | sí | Tamaño tal como lo muestra la grilla del portal (por ejemplo '263 KB'). |
documentos[].fechaTexto | string | sí | Fecha del anexo tal como la muestra la grilla del portal, como texto sin normalizar y con formato no garantizado; no la parsees como fecha. Es parte de la identidad natural del anexo. |
documentos[].estado | "descargado" · "omitido_formato" · "omitido_tamano" · "no_descargado" | sí | Estado del anexo en la grilla observada. 'descargado': hay archivo conservado (lleva archivoUrl). 'omitido_formato': el anexo no es PDF, Word, Excel ni imagen PNG o JPEG. 'omitido_tamano': supera el tope de tamaño. 'no_descargado': se observó pero no se conserva (error o límite de la corrida). |
documentos[].formato | "pdf" · "docx" · "doc" · "xlsx" · "xls" · "png" · … | null | sí |
documentos[].bytes | entero | null | sí |
documentos[].sha256 | string | null | sí |
documentos[].archivoUrl | string | null | sí |
documentos[].urlVenceEn | string | null | sí |
resultadoAnterior | booleano | sí | true si los documentos son de una descarga anterior: hay una actualización en curso (pendiente o procesando) o la última actualización falló (fallido). observadoEn dice de cuándo son. |
JSON Schema de salida
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"codigoLicitacion": {
"type": "string",
"description": "ID público de la licitación consultada."
},
"estado": {
"type": "string",
"enum": [
"no_solicitada",
"pendiente",
"procesando",
"disponible",
"parcial",
"fallido"
],
"description": "Estado de la descarga solicitada a Connect."
},
"solicitadoEn": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Instante ISO 8601 de la última solicitud, o null si no existe."
},
"finalizadoEn": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Instante ISO 8601 en que terminó la descarga, si corresponde."
},
"errorCodigo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Código acotado de fallo, sin datos de sesión ni URLs del portal."
},
"consultarEnSegundos": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Mientras la descarga está pendiente o en proceso, cuántos segundos esperar antes de volver a llamar a mercadopublico.adjuntos.consultar. null cuando ya terminó o no hay solicitud."
},
"observadoEn": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Instante ISO 8601 de la última inspección del portal conservada."
},
"totalAnexos": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Cantidad de anexos observados en el listado recorrido."
},
"completo": {
"type": "boolean",
"description": "Se recorrió todo el listado y se descargaron los adjuntos admitidos (PDF, Word, Excel, PNG y JPEG) dentro de los límites. Los formatos no admitidos o las descargas pendientes se informan en motivosIncompletitud."
},
"motivosIncompletitud": {
"type": "array",
"items": {
"type": "string"
},
"description": "Razones por las que el inventario o las descargas requieren revisión."
},
"documentos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "SHA-256 del archivo conservado; identifica su versión sin depender de la fila del portal. null si el anexo no se descargó."
},
"nombre": {
"type": "string",
"description": "Nombre declarado por el comprador para el anexo."
},
"descripcion": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Descripción del anexo en el portal, si existe."
},
"tipo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Tipo de anexo informado por el portal, si existe."
},
"tamanoTexto": {
"type": "string",
"description": "Tamaño tal como lo muestra la grilla del portal (por ejemplo '263 KB')."
},
"fechaTexto": {
"type": "string",
"description": "Fecha del anexo tal como la muestra la grilla del portal, como texto sin normalizar y con formato no garantizado; no la parsees como fecha. Es parte de la identidad natural del anexo."
},
"estado": {
"type": "string",
"enum": [
"descargado",
"omitido_formato",
"omitido_tamano",
"no_descargado"
],
"description": "Estado del anexo en la grilla observada. 'descargado': hay archivo conservado (lleva archivoUrl). 'omitido_formato': el anexo no es PDF, Word, Excel ni imagen PNG o JPEG. 'omitido_tamano': supera el tope de tamaño. 'no_descargado': se observó pero no se conserva (error o límite de la corrida)."
},
"formato": {
"anyOf": [
{
"type": "string",
"enum": [
"pdf",
"docx",
"doc",
"xlsx",
"xls",
"png",
"jpg"
],
"description": "Formato del archivo conservado, verificado por su contenido: 'pdf'; Word ('docx', 'doc'); Excel ('xlsx', 'xls'); imagen ('png', 'jpg', que incluye .jpeg). El enlace entrega el archivo con su tipo de contenido correspondiente."
},
{
"type": "null"
}
],
"description": "Formato del archivo conservado; null si el anexo no se descargó."
},
"bytes": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Tamaño en bytes del archivo conservado; null si no se descargó."
},
"sha256": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Huella SHA-256 del archivo conservado; null si no se descargó."
},
"archivoUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Enlace temporal al archivo conservado por Connect; null si no está descargado o no pudo firmarse. Nunca es una URL de sesión del portal."
},
"urlVenceEn": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Instante ISO 8601 en que caduca archivoUrl, si se firmó."
}
},
"required": [
"id",
"nombre",
"descripcion",
"tipo",
"tamanoTexto",
"fechaTexto",
"estado",
"formato",
"bytes",
"sha256",
"archivoUrl",
"urlVenceEn"
],
"additionalProperties": false
},
"description": "Todos los anexos observados en la grilla, sin clasificar su contenido: los descargados llevan enlace firmado; el resto indica su estado."
},
"resultadoAnterior": {
"type": "boolean",
"description": "true si los documentos son de una descarga anterior: hay una actualización en curso (pendiente o procesando) o la última actualización falló (fallido). observadoEn dice de cuándo son."
}
},
"required": [
"codigoLicitacion",
"estado",
"solicitadoEn",
"finalizadoEn",
"errorCodigo",
"consultarEnSegundos",
"observadoEn",
"totalAnexos",
"completo",
"motivosIncompletitud",
"documentos",
"resultadoAnterior"
],
"additionalProperties": false
}Errores de esta tool
| Código | HTTP | Reintentable | Qué hacer |
|---|---|---|---|
connection_disabled | 403 | no | Reactívala en /connections o usa otra conexión del mismo sistema. |
Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.
Mercado Público
Las 2 tools de Mercado Público en el plan pagado.
Solicitar descarga de adjuntos de una licitación
Encola la descarga de los adjuntos PDF, Word (.docx, .doc), Excel (.xlsx, .xls) e imágenes (.png, .jpg, .jpeg) desde el portal de Mercado Público, sin utilizar su API y sin seleccionar por nombre o descripción.